]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
gai_init: Avoid jumping from if condition to its else counterpart
authorSiddhesh Poyarekar <siddhesh@sourceware.org>
Tue, 3 Aug 2021 15:59:23 +0000 (21:29 +0530)
committerSiddhesh Poyarekar <siddhesh@sourceware.org>
Tue, 22 Mar 2022 14:11:46 +0000 (19:41 +0530)
Clean up another antipattern where code flows from an if condition to
its else counterpart with a goto.

Most of the change in this patch is whitespace-only; a `git diff -b`
ought to show the actual logic changes.

Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Reviewed-by: DJ Delorie <dj@redhat.com>
sysdeps/posix/getaddrinfo.c

index 984baf97449552fc6d75c5d3f57056136003104d..aa34de6591b5b5491fe6707d8c68c8f13d1245b4 100644 (file)
@@ -1926,142 +1926,122 @@ gaiconf_init (void)
   bool scopelist_nullbits = false;
 
   FILE *fp = fopen (GAICONF_FNAME, "rce");
-  if (fp != NULL)
+  if (fp == NULL)
+    goto no_file;
+
+  struct __stat64_t64 st;
+  if (__fstat64_time64 (fileno (fp), &st) != 0)
     {
-      struct __stat64_t64 st;
-      if (__fstat64_time64 (fileno (fp), &st) != 0)
-       {
-         fclose (fp);
-         goto no_file;
-       }
+      fclose (fp);
+      goto no_file;
+    }
 
-      char *line = NULL;
-      size_t linelen = 0;
+  char *line = NULL;
+  size_t linelen = 0;
 
-      __fsetlocking (fp, FSETLOCKING_BYCALLER);
+  __fsetlocking (fp, FSETLOCKING_BYCALLER);
 
-      while (!feof_unlocked (fp))
-       {
-         ssize_t n = __getline (&line, &linelen, fp);
-         if (n <= 0)
-           break;
+  while (!feof_unlocked (fp))
+    {
+      ssize_t n = __getline (&line, &linelen, fp);
+      if (n <= 0)
+       break;
 
-         /* Handle comments.  No escaping possible so this is easy.  */
-         char *cp = strchr (line, '#');
-         if (cp != NULL)
-           *cp = '\0';
+      /* Handle comments.  No escaping possible so this is easy.  */
+      char *cp = strchr (line, '#');
+      if (cp != NULL)
+       *cp = '\0';
 
-         cp = line;
-         while (isspace (*cp))
-           ++cp;
+      cp = line;
+      while (isspace (*cp))
+       ++cp;
 
-         char *cmd = cp;
-         while (*cp != '\0' && !isspace (*cp))
-           ++cp;
-         size_t cmdlen = cp - cmd;
+      char *cmd = cp;
+      while (*cp != '\0' && !isspace (*cp))
+       ++cp;
+      size_t cmdlen = cp - cmd;
 
-         if (*cp != '\0')
-           *cp++ = '\0';
-         while (isspace (*cp))
-           ++cp;
+      if (*cp != '\0')
+       *cp++ = '\0';
+      while (isspace (*cp))
+       ++cp;
 
-         char *val1 = cp;
-         while (*cp != '\0' && !isspace (*cp))
-           ++cp;
-         size_t val1len = cp - cmd;
+      char *val1 = cp;
+      while (*cp != '\0' && !isspace (*cp))
+       ++cp;
+      size_t val1len = cp - cmd;
 
-         /* We always need at least two values.  */
-         if (val1len == 0)
-           continue;
+      /* We always need at least two values.  */
+      if (val1len == 0)
+       continue;
 
-         if (*cp != '\0')
-           *cp++ = '\0';
-         while (isspace (*cp))
-           ++cp;
+      if (*cp != '\0')
+       *cp++ = '\0';
+      while (isspace (*cp))
+       ++cp;
 
-         char *val2 = cp;
-         while (*cp != '\0' && !isspace (*cp))
-           ++cp;
+      char *val2 = cp;
+      while (*cp != '\0' && !isspace (*cp))
+       ++cp;
 
-         /*  Ignore the rest of the line.  */
-         *cp = '\0';
+      /*  Ignore the rest of the line.  */
+      *cp = '\0';
 
-         switch (cmdlen)
+      switch (cmdlen)
+       {
+       case 5:
+         if (strcmp (cmd, "label") == 0)
            {
-           case 5:
-             if (strcmp (cmd, "label") == 0)
+             if (!add_prefixlist (&labellist, &nlabellist,
+                                  &labellist_nullbits, val1, val2, &cp))
                {
-                 if (!add_prefixlist (&labellist, &nlabellist,
-                                      &labellist_nullbits, val1, val2, &cp))
-                   {
-                     free (line);
-                     fclose (fp);
-                     goto no_file;
-                   }
+                 free (line);
+                 fclose (fp);
+                 goto no_file;
                }
-             break;
+           }
+         break;
 
-           case 6:
-             if (strcmp (cmd, "reload") == 0)
-               {
-                 gaiconf_reload_flag = strcmp (val1, "yes") == 0;
-                 if (gaiconf_reload_flag)
-                   gaiconf_reload_flag_ever_set = 1;
-               }
-             break;
+       case 6:
+         if (strcmp (cmd, "reload") == 0)
+           {
+             gaiconf_reload_flag = strcmp (val1, "yes") == 0;
+             if (gaiconf_reload_flag)
+               gaiconf_reload_flag_ever_set = 1;
+           }
+         break;
 
-           case 7:
-             if (strcmp (cmd, "scopev4") == 0)
+       case 7:
+         if (strcmp (cmd, "scopev4") == 0)
+           {
+             struct in6_addr prefix;
+             unsigned long int bits;
+             unsigned long int val;
+             char *endp;
+
+             bits = 32;
+             __set_errno (0);
+             cp = strchr (val1, '/');
+             if (cp != NULL)
+               *cp++ = '\0';
+             if (inet_pton (AF_INET6, val1, &prefix))
                {
-                 struct in6_addr prefix;
-                 unsigned long int bits;
-                 unsigned long int val;
-                 char *endp;
-
-                 bits = 32;
-                 __set_errno (0);
-                 cp = strchr (val1, '/');
-                 if (cp != NULL)
-                   *cp++ = '\0';
-                 if (inet_pton (AF_INET6, val1, &prefix))
-                   {
-                     bits = 128;
-                     if (IN6_IS_ADDR_V4MAPPED (&prefix)
-                         && (cp == NULL
-                             || (bits = strtoul (cp, &endp, 10)) != ULONG_MAX
-                             || errno != ERANGE)
-                         && *endp == '\0'
-                         && bits >= 96
-                         && bits <= 128
-                         && ((val = strtoul (val2, &endp, 10)) != ULONG_MAX
-                             || errno != ERANGE)
-                         && *endp == '\0'
-                         && val <= INT_MAX)
-                       {
-                         if (!add_scopelist (&scopelist, &nscopelist,
-                                             &scopelist_nullbits, &prefix,
-                                             bits, val))
-                           {
-                             free (line);
-                             fclose (fp);
-                             goto no_file;
-                           }
-                       }
-                   }
-                 else if (inet_pton (AF_INET, val1, &prefix.s6_addr32[3])
-                          && (cp == NULL
-                              || (bits = strtoul (cp, &endp, 10)) != ULONG_MAX
-                              || errno != ERANGE)
-                          && *endp == '\0'
-                          && bits <= 32
-                          && ((val = strtoul (val2, &endp, 10)) != ULONG_MAX
-                              || errno != ERANGE)
-                          && *endp == '\0'
-                          && val <= INT_MAX)
+                 bits = 128;
+                 if (IN6_IS_ADDR_V4MAPPED (&prefix)
+                     && (cp == NULL
+                         || (bits = strtoul (cp, &endp, 10)) != ULONG_MAX
+                         || errno != ERANGE)
+                     && *endp == '\0'
+                     && bits >= 96
+                     && bits <= 128
+                     && ((val = strtoul (val2, &endp, 10)) != ULONG_MAX
+                         || errno != ERANGE)
+                     && *endp == '\0'
+                     && val <= INT_MAX)
                    {
                      if (!add_scopelist (&scopelist, &nscopelist,
                                          &scopelist_nullbits, &prefix,
-                                         bits + 96, val))
+                                         bits, val))
                        {
                          free (line);
                          fclose (fp);
@@ -2069,173 +2049,191 @@ gaiconf_init (void)
                        }
                    }
                }
-             break;
-
-           case 10:
-             if (strcmp (cmd, "precedence") == 0)
+             else if (inet_pton (AF_INET, val1, &prefix.s6_addr32[3])
+                      && (cp == NULL
+                          || (bits = strtoul (cp, &endp, 10)) != ULONG_MAX
+                          || errno != ERANGE)
+                      && *endp == '\0'
+                      && bits <= 32
+                      && ((val = strtoul (val2, &endp, 10)) != ULONG_MAX
+                          || errno != ERANGE)
+                      && *endp == '\0'
+                      && val <= INT_MAX)
                {
-                 if (!add_prefixlist (&precedencelist, &nprecedencelist,
-                                      &precedencelist_nullbits, val1, val2,
-                                      &cp))
+                 if (!add_scopelist (&scopelist, &nscopelist,
+                                     &scopelist_nullbits, &prefix,
+                                     bits + 96, val))
                    {
                      free (line);
                      fclose (fp);
                      goto no_file;
                    }
                }
-             break;
-           }
-       }
-
-      free (line);
-
-      fclose (fp);
-
-      /* Create the array for the labels.  */
-      struct prefixentry *new_labels;
-      if (nlabellist > 0)
-       {
-         if (!labellist_nullbits)
-           ++nlabellist;
-         new_labels = malloc (nlabellist * sizeof (*new_labels));
-         if (new_labels == NULL)
-           goto no_file;
-
-         int i = nlabellist;
-         if (!labellist_nullbits)
-           {
-             --i;
-             memset (&new_labels[i].prefix, '\0', sizeof (struct in6_addr));
-             new_labels[i].bits = 0;
-             new_labels[i].val = 1;
            }
+         break;
 
-         struct prefixlist *l = labellist;
-         while (i-- > 0)
+       case 10:
+         if (strcmp (cmd, "precedence") == 0)
            {
-             new_labels[i] = l->entry;
-             l = l->next;
+             if (!add_prefixlist (&precedencelist, &nprecedencelist,
+                                  &precedencelist_nullbits, val1, val2,
+                                  &cp))
+               {
+                 free (line);
+                 fclose (fp);
+                 goto no_file;
+               }
            }
-         free_prefixlist (labellist);
-         labellist = NULL;
-
-         /* Sort the entries so that the most specific ones are at
-            the beginning.  */
-         qsort (new_labels, nlabellist, sizeof (*new_labels), prefixcmp);
+         break;
        }
-      else
-       new_labels = (struct prefixentry *) default_labels;
-
-      struct prefixentry *new_precedence;
-      if (nprecedencelist > 0)
-       {
-         if (!precedencelist_nullbits)
-           ++nprecedencelist;
-         new_precedence = malloc (nprecedencelist * sizeof (*new_precedence));
-         if (new_precedence == NULL)
-           {
-             if (new_labels != default_labels)
-               free (new_labels);
-             goto no_file;
-           }
+    }
 
-         int i = nprecedencelist;
-         if (!precedencelist_nullbits)
-           {
-             --i;
-             memset (&new_precedence[i].prefix, '\0',
-                     sizeof (struct in6_addr));
-             new_precedence[i].bits = 0;
-             new_precedence[i].val = 40;
-           }
+  free (line);
 
-         struct prefixlist *l = precedencelist;
-         while (i-- > 0)
-           {
-             new_precedence[i] = l->entry;
-             l = l->next;
-           }
-         free_prefixlist (precedencelist);
-         precedencelist = NULL;
+  fclose (fp);
 
-         /* Sort the entries so that the most specific ones are at
-            the beginning.  */
-         qsort (new_precedence, nprecedencelist, sizeof (*new_precedence),
-                prefixcmp);
+  /* Create the array for the labels.  */
+  struct prefixentry *new_labels;
+  if (nlabellist > 0)
+    {
+      if (!labellist_nullbits)
+       ++nlabellist;
+      new_labels = malloc (nlabellist * sizeof (*new_labels));
+      if (new_labels == NULL)
+       goto no_file;
+
+      int i = nlabellist;
+      if (!labellist_nullbits)
+       {
+         --i;
+         memset (&new_labels[i].prefix, '\0', sizeof (struct in6_addr));
+         new_labels[i].bits = 0;
+         new_labels[i].val = 1;
        }
-      else
-       new_precedence = (struct prefixentry *) default_precedence;
 
-      struct scopeentry *new_scopes;
-      if (nscopelist > 0)
+      struct prefixlist *l = labellist;
+      while (i-- > 0)
        {
-         if (!scopelist_nullbits)
-           ++nscopelist;
-         new_scopes = malloc (nscopelist * sizeof (*new_scopes));
-         if (new_scopes == NULL)
-           {
-             if (new_labels != default_labels)
-               free (new_labels);
-             if (new_precedence != default_precedence)
-               free (new_precedence);
-             goto no_file;
-           }
-
-         int i = nscopelist;
-         if (!scopelist_nullbits)
-           {
-             --i;
-             new_scopes[i].addr32 = 0;
-             new_scopes[i].netmask = 0;
-             new_scopes[i].scope = 14;
-           }
+         new_labels[i] = l->entry;
+         l = l->next;
+       }
+      free_prefixlist (labellist);
+      labellist = NULL;
 
-         struct scopelist *l = scopelist;
-         while (i-- > 0)
-           {
-             new_scopes[i] = l->entry;
-             l = l->next;
-           }
-         free_scopelist (scopelist);
+      /* Sort the entries so that the most specific ones are at
+        the beginning.  */
+      qsort (new_labels, nlabellist, sizeof (*new_labels), prefixcmp);
+    }
+  else
+    new_labels = (struct prefixentry *) default_labels;
 
-         /* Sort the entries so that the most specific ones are at
-            the beginning.  */
-         qsort (new_scopes, nscopelist, sizeof (*new_scopes),
-                scopecmp);
+  struct prefixentry *new_precedence;
+  if (nprecedencelist > 0)
+    {
+      if (!precedencelist_nullbits)
+       ++nprecedencelist;
+      new_precedence = malloc (nprecedencelist * sizeof (*new_precedence));
+      if (new_precedence == NULL)
+       {
+         if (new_labels != default_labels)
+           free (new_labels);
+         goto no_file;
        }
-      else
-       new_scopes = (struct scopeentry *) default_scopes;
-
-      /* Now we are ready to replace the values.  */
-      const struct prefixentry *old = labels;
-      labels = new_labels;
-      if (old != default_labels)
-       free ((void *) old);
 
-      old = precedence;
-      precedence = new_precedence;
-      if (old != default_precedence)
-       free ((void *) old);
+      int i = nprecedencelist;
+      if (!precedencelist_nullbits)
+       {
+         --i;
+         memset (&new_precedence[i].prefix, '\0',
+                 sizeof (struct in6_addr));
+         new_precedence[i].bits = 0;
+         new_precedence[i].val = 40;
+       }
 
-      const struct scopeentry *oldscope = scopes;
-      scopes = new_scopes;
-      if (oldscope != default_scopes)
-       free ((void *) oldscope);
+      struct prefixlist *l = precedencelist;
+      while (i-- > 0)
+       {
+         new_precedence[i] = l->entry;
+         l = l->next;
+       }
+      free_prefixlist (precedencelist);
+      precedencelist = NULL;
 
-      save_gaiconf_mtime (&st);
+      /* Sort the entries so that the most specific ones are at
+        the beginning.  */
+      qsort (new_precedence, nprecedencelist, sizeof (*new_precedence),
+            prefixcmp);
     }
   else
+    new_precedence = (struct prefixentry *) default_precedence;
+
+  struct scopeentry *new_scopes;
+  if (nscopelist > 0)
     {
-    no_file:
-      free_prefixlist (labellist);
-      free_prefixlist (precedencelist);
+      if (!scopelist_nullbits)
+       ++nscopelist;
+      new_scopes = malloc (nscopelist * sizeof (*new_scopes));
+      if (new_scopes == NULL)
+       {
+         if (new_labels != default_labels)
+           free (new_labels);
+         if (new_precedence != default_precedence)
+           free (new_precedence);
+         goto no_file;
+       }
+
+      int i = nscopelist;
+      if (!scopelist_nullbits)
+       {
+         --i;
+         new_scopes[i].addr32 = 0;
+         new_scopes[i].netmask = 0;
+         new_scopes[i].scope = 14;
+       }
+
+      struct scopelist *l = scopelist;
+      while (i-- > 0)
+       {
+         new_scopes[i] = l->entry;
+         l = l->next;
+       }
       free_scopelist (scopelist);
 
-      /* If we previously read the file but it is gone now, free the
-        old data and use the builtin one.  Leave the reload flag
-        alone.  */
-      fini ();
+      /* Sort the entries so that the most specific ones are at
+        the beginning.  */
+      qsort (new_scopes, nscopelist, sizeof (*new_scopes),
+            scopecmp);
     }
+  else
+    new_scopes = (struct scopeentry *) default_scopes;
+
+  /* Now we are ready to replace the values.  */
+  const struct prefixentry *old = labels;
+  labels = new_labels;
+  if (old != default_labels)
+    free ((void *) old);
+
+  old = precedence;
+  precedence = new_precedence;
+  if (old != default_precedence)
+    free ((void *) old);
+
+  const struct scopeentry *oldscope = scopes;
+  scopes = new_scopes;
+  if (oldscope != default_scopes)
+    free ((void *) oldscope);
+
+  save_gaiconf_mtime (&st);
+  return;
+
+no_file:
+  free_prefixlist (labellist);
+  free_prefixlist (precedencelist);
+  free_scopelist (scopelist);
+
+  /* If we previously read the file but it is gone now, free the old data and
+     use the builtin one.  Leave the reload flag alone.  */
+  fini ();
 }