From: Bruno Haible Date: Wed, 7 Jan 2026 10:02:00 +0000 (+0100) Subject: getdelim: Avoid a -Wjump-misses-init warning (regr. 2025-12-09). X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5072d31210f301dcb51627a09dab83905ccccf37;p=thirdparty%2Fgnulib.git getdelim: Avoid a -Wjump-misses-init warning (regr. 2025-12-09). Reported by correctmost in . * lib/getdelim.c (getdelim): Reduce the scope of the 'cur_len' variable. --- diff --git a/ChangeLog b/ChangeLog index f0292f8119..9879b37d90 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2026-01-07 Bruno Haible + + getdelim: Avoid a -Wjump-misses-init warning (regr. 2025-12-09). + Reported by correctmost in + . + * lib/getdelim.c (getdelim): Reduce the scope of the 'cur_len' variable. + 2026-01-05 Paul Eggert std-gnu11: port C++11 test to C++20 diff --git a/lib/getdelim.c b/lib/getdelim.c index e16acf8c64..21f3abc294 100644 --- a/lib/getdelim.c +++ b/lib/getdelim.c @@ -92,54 +92,56 @@ getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) *lineptr = new_lineptr; } - size_t cur_len = 0; - for (;;) - { - int i; - - i = getc_maybe_unlocked (fp); - if (i == EOF) - { - result = -1; + { + size_t cur_len = 0; + for (;;) + { + int i; + + i = getc_maybe_unlocked (fp); + if (i == EOF) + { + result = -1; + break; + } + + /* Make enough space for len+1 (for final NUL) bytes. */ + if (cur_len + 1 >= *n) + { + size_t needed_max = + SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX; + size_t needed = 2 * *n + 1; /* Be generous. */ + + if (needed_max < needed) + needed = needed_max; + if (cur_len + 1 >= needed) + { + result = -1; + errno = EOVERFLOW; + goto unlock_return; + } + + char *new_lineptr = (char *) realloc (*lineptr, needed); + if (new_lineptr == NULL) + { + alloc_failed (); + result = -1; + goto unlock_return; + } + + *lineptr = new_lineptr; + *n = needed; + } + + (*lineptr)[cur_len] = i; + cur_len++; + + if (i == delimiter) break; - } - - /* Make enough space for len+1 (for final NUL) bytes. */ - if (cur_len + 1 >= *n) - { - size_t needed_max = - SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX; - size_t needed = 2 * *n + 1; /* Be generous. */ - - if (needed_max < needed) - needed = needed_max; - if (cur_len + 1 >= needed) - { - result = -1; - errno = EOVERFLOW; - goto unlock_return; - } - - char *new_lineptr = (char *) realloc (*lineptr, needed); - if (new_lineptr == NULL) - { - alloc_failed (); - result = -1; - goto unlock_return; - } - - *lineptr = new_lineptr; - *n = needed; - } - - (*lineptr)[cur_len] = i; - cur_len++; - - if (i == delimiter) - break; - } - (*lineptr)[cur_len] = '\0'; - result = cur_len ? cur_len : result; + } + (*lineptr)[cur_len] = '\0'; + result = cur_len ? cur_len : result; + } unlock_return: funlockfile (fp); /* doesn't set errno */