diff options
author | Matt Kraai <kraai@debian.org> | 2001-10-18 21:04:22 +0400 |
---|---|---|
committer | Matt Kraai <kraai@debian.org> | 2001-10-18 21:04:22 +0400 |
commit | bcca3317b59a0180f0b42428e9c25405bc423520 (patch) | |
tree | 505f6775c94e42f37287c73e8a2ce14e020b201f /libbb/fgets_str.c | |
parent | a7512d74fa64649cdd93602a00046b4ba028cea9 (diff) |
Return NULL if EOF is encountered before terminating_string.
Diffstat (limited to 'libbb/fgets_str.c')
-rw-r--r-- | libbb/fgets_str.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/libbb/fgets_str.c b/libbb/fgets_str.c index 33d8d00cc..4943464d5 100644 --- a/libbb/fgets_str.c +++ b/libbb/fgets_str.c @@ -19,11 +19,10 @@ #include <stdlib.h> #include <string.h> -/* - * Continue reading from file until the terminating string is encountered. - * Return data as string. - * e.g. fgets_str(file, "\n"); will read till end of file - */ +#include "libbb.h" + +/* Read up to (and including) TERMINATING_STRING from FILE and return it. + * Return NULL on EOF. */ char *fgets_str(FILE *file, const char *terminating_string) { @@ -37,12 +36,13 @@ char *fgets_str(FILE *file, const char *terminating_string) while (1) { ch = fgetc(file); if (ch == EOF) { - break; + free(linebuf); + return NULL; } /* grow the line buffer as necessary */ while (idx > linebufsz - 2) { - linebuf = realloc(linebuf, linebufsz += 1000); /* GROWBY */ + linebuf = xrealloc(linebuf, linebufsz += 1000); } linebuf[idx] = ch; @@ -55,9 +55,6 @@ char *fgets_str(FILE *file, const char *terminating_string) break; } } - if (idx == 0) { - return NULL; - } linebuf[idx] = '\0'; return(linebuf); } |