diff --git a/libbb/fgets_str.c b/libbb/fgets_str.c index 1a7f2e9e0..c884ef8af 100644 --- a/libbb/fgets_str.c +++ b/libbb/fgets_str.c @@ -17,7 +17,7 @@ static char *xmalloc_fgets_internal(FILE *file, const char *terminating_string, int linebufsz = 0; int idx = 0; int ch; - size_t maxsz = *maxsz_p; + size_t maxsz = maxsz_p ? *maxsz_p : INT_MAX - 4095; while (1) { ch = fgetc(file); @@ -53,7 +53,8 @@ static char *xmalloc_fgets_internal(FILE *file, const char *terminating_string, /* Grow/shrink *first*, then store NUL */ linebuf = xrealloc(linebuf, idx + 1); linebuf[idx] = '\0'; - *maxsz_p = idx; + if (maxsz_p) + *maxsz_p = idx; return linebuf; } @@ -63,23 +64,15 @@ static char *xmalloc_fgets_internal(FILE *file, const char *terminating_string, * Return NULL if EOF is reached immediately. */ char* FAST_FUNC xmalloc_fgets_str(FILE *file, const char *terminating_string) { - size_t maxsz = INT_MAX - 4095; - return xmalloc_fgets_internal(file, terminating_string, 0, &maxsz); + return xmalloc_fgets_internal(file, terminating_string, 0, NULL); } char* FAST_FUNC xmalloc_fgets_str_len(FILE *file, const char *terminating_string, size_t *maxsz_p) { - size_t maxsz; - - if (!maxsz_p) { - maxsz = INT_MAX - 4095; - maxsz_p = &maxsz; - } return xmalloc_fgets_internal(file, terminating_string, 0, maxsz_p); } char* FAST_FUNC xmalloc_fgetline_str(FILE *file, const char *terminating_string) { - size_t maxsz = INT_MAX - 4095; - return xmalloc_fgets_internal(file, terminating_string, 1, &maxsz); + return xmalloc_fgets_internal(file, terminating_string, 1, NULL); }