X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fvfgets.c;h=1ddd99b9b55f3c1d54615bafb7617297554550d0;hp=beb0afd0a43853249c588c0250951e67eb87b65b;hb=ee8d01d64e8832304256de53db07228e2be67f6a;hpb=81a21a9a97d8633f6d6231e31fdb6e328d0d3ff2 diff --git a/sbr/vfgets.c b/sbr/vfgets.c index beb0afd..1ddd99b 100644 --- a/sbr/vfgets.c +++ b/sbr/vfgets.c @@ -1,77 +1,72 @@ - /* - * vfgets.c -- virtual fgets - * - * $Id$ - * - * This code is Copyright (c) 2002, by the authors of nmh. See the - * COPYRIGHT file in the root directory of the nmh distribution for - * complete copyright information. - */ +** vfgets.c -- virtual fgets +** +** This code is Copyright (c) 2002, by the authors of nmh. See the +** COPYRIGHT file in the root directory of the nmh distribution for +** complete copyright information. +*/ +#include #include #include -#define QUOTE '\\' +#define QUOTE '\\' int -vfgets (FILE *in, char **bp) +vfgets(FILE *in, char **bp) { - int toggle; - char *cp, *dp, *ep, *fp; - static int len = 0; - static char *pp = NULL; + int toggle; + char *cp, *dp, *ep, *fp; + static int len = 0; + static char *pp = NULL; - if (pp == NULL) - pp = mh_xmalloc ((size_t) (len = BUFSIZ)); + if (pp == NULL) + pp = mh_xcalloc(len = BUFSIZ, sizeof(char)); - for (ep = (cp = pp) + len - 1;;) { - if (fgets (cp, ep - cp + 1, in) == NULL) { - if (cp != pp) { - *bp = pp; - return 0; - } - return (ferror (in) && !feof (in) ? -1 : 1); - } + for (ep = (cp = pp) + len - 1;;) { + if (fgets(cp, ep - cp + 1, in) == NULL) { + if (cp != pp) { + *bp = pp; + return 0; + } + return (ferror(in) && !feof(in) ? -1 : 1); + } - if ((dp = cp + strlen (cp) - 2) < cp || *dp != QUOTE) { + if ((dp = cp + strlen(cp) - 2) < cp || *dp != QUOTE) { wrong_guess: - if (cp > ++dp) - adios (NULL, "vfgets() botch -- you lose big"); - if (*dp == '\n') { - *bp = pp; - return 0; - } else { - cp = ++dp; - } - } else { - for (fp = dp - 1, toggle = 0; fp >= cp; fp--) { - if (*fp != QUOTE) - break; - else - toggle = !toggle; - } - if (toggle) - goto wrong_guess; + if (cp > ++dp) + adios(EX_SOFTWARE, NULL, "vfgets() botch -- you lose big"); + if (*dp == '\n') { + *bp = pp; + return 0; + } else { + cp = ++dp; + } + } else { + for (fp = dp - 1, toggle = 0; fp >= cp; fp--) { + if (*fp != QUOTE) + break; + else + toggle = !toggle; + } + if (toggle) + goto wrong_guess; - if (*++dp == '\n') { - *--dp = 0; - cp = dp; - } else { - cp = ++dp; - } - } + if (*++dp == '\n') { + *--dp = 0; + cp = dp; + } else { + cp = ++dp; + } + } - if (cp >= ep) { - int curlen = cp - pp; + if (cp >= ep) { + int curlen = cp - pp; - if (!(dp = realloc (pp, (size_t) (len += BUFSIZ)))) { - adios (NULL, "unable to allocate string storage"); - } else { - cp = dp + curlen; - ep = (pp = dp) + len - 1; - } + dp = mh_xrealloc(pp, len += BUFSIZ); + cp = dp + curlen; + ep = (pp = dp) + len - 1; + } } - } }