diff options
-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); } |