Use a NULL value of maxsz_p to indicate to xmalloc_fgets_internal()
that the caller doesn't care about the maximum size of the buffer.
This allows the default maximum size to be set once in
xmalloc_fgets_internal() instead of separately in each caller.

function                                             old     new   delta
xmalloc_fgets_internal                               273     287     +14
xmalloc_fgets_str                                     30       9     -21
xmalloc_fgetline_str                                  33      12     -21
xmalloc_fgets_str_len                                 38      10     -28
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 14/-70)            Total: -56 bytes

Signed-off-by: Ron Yorston <r...@pobox.com>
---
 libbb/fgets_str.c | 17 +++++------------
 1 file changed, 5 insertions(+), 12 deletions(-)

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);
 }
-- 
2.29.2

_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to