From bcca3317b59a0180f0b42428e9c25405bc423520 Mon Sep 17 00:00:00 2001 From: Matt Kraai Date: Thu, 18 Oct 2001 17:04:22 +0000 Subject: Return NULL if EOF is encountered before terminating_string. --- libbb/fgets_str.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'libbb/fgets_str.c') 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 #include -/* - * 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); } -- cgit v1.2.3