]> git.ipfire.org Git - thirdparty/gnulib.git/commitdiff
getdelim: Avoid a -Wjump-misses-init warning (regr. 2025-12-09).
authorBruno Haible <bruno@clisp.org>
Wed, 7 Jan 2026 10:02:00 +0000 (11:02 +0100)
committerBruno Haible <bruno@clisp.org>
Wed, 7 Jan 2026 10:02:00 +0000 (11:02 +0100)
Reported by correctmost <cmlists@sent.com> in
<https://lists.gnu.org/archive/html/bug-gnulib/2026-01/msg00019.html>.

* lib/getdelim.c (getdelim): Reduce the scope of the 'cur_len' variable.

ChangeLog
lib/getdelim.c

index f0292f81193059eacacee7f6148a0ac42afcf054..9879b37d90c9df9091322e0b4b7cdeb742af8591 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2026-01-07  Bruno Haible  <bruno@clisp.org>
+
+       getdelim: Avoid a -Wjump-misses-init warning (regr. 2025-12-09).
+       Reported by correctmost <cmlists@sent.com> in
+       <https://lists.gnu.org/archive/html/bug-gnulib/2026-01/msg00019.html>.
+       * lib/getdelim.c (getdelim): Reduce the scope of the 'cur_len' variable.
+
 2026-01-05  Paul Eggert  <eggert@cs.ucla.edu>
 
        std-gnu11: port C++11 test to C++20
index e16acf8c64b0a9bd9714fafaff2f8d3820b56f03..21f3abc294cdb3cfa965d4f19e036ef49a9e050b 100644 (file)
@@ -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 */