grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] net: Don't use nested functions to allow building with clang


From: Javier Martinez Canillas
Subject: [PATCH] net: Don't use nested functions to allow building with clang
Date: Tue, 19 May 2020 10:34:22 +0200

Nested functions are supported as an extension in GNU C, but are not in
the clang compiler. Commit cb2f15c5448 ("normal/main: Search for specific
config files for netboot") added a nested function which caused the build
to break when compiling with clang.

Reported-by: Daniel Axtens <address@hidden>
Signed-off-by: Javier Martinez Canillas <address@hidden>
---

 grub-core/net/net.c | 65 +++++++++++++++++++++++----------------------
 1 file changed, 33 insertions(+), 32 deletions(-)

diff --git a/grub-core/net/net.c b/grub-core/net/net.c
index c42f0f4f71d..ec7e2899ed5 100644
--- a/grub-core/net/net.c
+++ b/grub-core/net/net.c
@@ -1735,42 +1735,43 @@ grub_net_restore_hw (void)
   return GRUB_ERR_NONE;
 }
 
-grub_err_t
-grub_net_search_config_file (char *config)
+static int grub_config_search_through (char *config, char *suffix,
+                                       grub_size_t num_tries,
+                                       grub_size_t slice_size)
 {
-  grub_size_t config_len;
-  char *suffix;
+  while (num_tries-- > 0)
+    {
+      grub_file_t file;
 
-  auto int search_through (grub_size_t num_tries, grub_size_t slice_size);
-  int search_through (grub_size_t num_tries, grub_size_t slice_size)
-  {
-    while (num_tries-- > 0)
-      {
-        grub_file_t file;
+      grub_dprintf ("net", "attempt to fetch config %s\n", config);
 
-        grub_dprintf ("net", "attempt to fetch config %s\n", config);
+      file = grub_file_open (config, GRUB_FILE_TYPE_CONFIG);
 
-        file = grub_file_open (config, GRUB_FILE_TYPE_CONFIG);
+      if (file)
+        {
+          grub_file_close (file);
+          return 0;
+        }
+      else
+        {
+          if (grub_errno == GRUB_ERR_IO)
+            grub_errno = GRUB_ERR_NONE;
+        }
 
-        if (file)
-          {
-            grub_file_close (file);
-            return 0;
-          }
-        else
-          {
-            if (grub_errno == GRUB_ERR_IO)
-              grub_errno = GRUB_ERR_NONE;
-          }
+      if (grub_strlen (suffix) < slice_size)
+        break;
 
-        if (grub_strlen (suffix) < slice_size)
-          break;
+      config[grub_strlen (config) - slice_size] = '\0';
+    }
 
-        config[grub_strlen (config) - slice_size] = '\0';
-      }
+  return 1;
+}
 
-    return 1;
-  }
+grub_err_t
+grub_net_search_config_file (char *config)
+{
+  grub_size_t config_len;
+  char *suffix;
 
   config_len = grub_strlen (config);
   config[config_len] = '-';
@@ -1801,7 +1802,7 @@ grub_net_search_config_file (char *config)
       if (client_uuid)
         {
           grub_strcpy (suffix, client_uuid);
-          if (search_through (1, 0) == 0)
+          if (grub_config_search_through (config, suffix, 1, 0) == 0)
             return GRUB_ERR_NONE;
         }
 
@@ -1816,7 +1817,7 @@ grub_net_search_config_file (char *config)
         if (*ptr == ':')
           *ptr = '-';
 
-      if (search_through (1, 0) == 0)
+      if (grub_config_search_through (config, suffix, 1, 0) == 0)
         return GRUB_ERR_NONE;
 
       /* By IP address */
@@ -1831,7 +1832,7 @@ grub_net_search_config_file (char *config)
                            ((n >> 24) & 0xff), ((n >> 16) & 0xff),      \
                            ((n >> 8) & 0xff), ((n >> 0) & 0xff));
 
-            if (search_through (8, 1) == 0)
+            if (grub_config_search_through (config, suffix, 8, 1) == 0)
               return GRUB_ERR_NONE;
             break;
           }
@@ -1848,7 +1849,7 @@ grub_net_search_config_file (char *config)
                 *ptr = '-';
 
             grub_snprintf (suffix, GRUB_NET_MAX_STR_ADDR_LEN, "%s", buf);
-            if (search_through (1, 0) == 0)
+            if (grub_config_search_through (config, suffix, 1, 0) == 0)
               return GRUB_ERR_NONE;
             break;
           }
-- 
2.26.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]