grub-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v2] net: break out nested function


From: Leif Lindholm
Subject: Re: [PATCH v2] net: break out nested function
Date: Tue, 19 May 2020 17:18:11 +0100
User-agent: Mutt/1.10.1 (2018-07-13)

On Tue, May 19, 2020 at 17:53:03 +0200, Javier Martinez Canillas wrote:
> Nested functions are not supported in C, but are permitted as an extension
> in the GNU C dialect. 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.
> 
> Break that out into a static helper function to make the code portable
> again.

Works for me.
Acked-by: Leif Lindholm <address@hidden>

> Reported-by: Daniel Axtens <address@hidden>
> Signed-off-by: Javier Martinez Canillas <address@hidden>
> Tested-by: Daniel Axtens <address@hidden>
> ---
> 
> Changes in v2:
> - Reword subject and commit message as suggested by Leif Lindholm.
> - Fix code style issue on function definition.
> - Add Daniel Axtens Tested-by tag (thanks!).
> 
>  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..3a310c939b5 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]