[PATCH] libbb: code shrink fgets_str
Denys Vlasenko
vda.linux at googlemail.com
Wed Feb 3 19:44:00 UTC 2021
Applied, thanks!
On Sat, Jan 23, 2021 at 2:22 PM Ron Yorston <rmy at pobox.com> wrote:
>
> 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 <rmy at 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 at busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
More information about the busybox
mailing list