Hi,

On 2022-04-08 13:18:57 -0700, Nathan Bossart wrote:
> @@ -1035,32 +1036,9 @@ ParseConfigDirectory(const char *includedir,
>  
>               join_path_components(filename, directory, de->d_name);
>               canonicalize_path(filename);
> -             if (stat(filename, &st) == 0)
> +             de_type = get_dirent_type(filename, de, true, elevel);
> +             if (de_type == PGFILETYPE_ERROR)
>               {
> -                     if (!S_ISDIR(st.st_mode))
> -                     {
> -                             /* Add file to array, increasing its size in 
> blocks of 32 */
> -                             if (num_filenames >= size_filenames)
> -                             {
> -                                     size_filenames += 32;
> -                                     filenames = (char **) 
> repalloc(filenames,
> -                                                                             
>         size_filenames * sizeof(char *));
> -                             }
> -                             filenames[num_filenames] = pstrdup(filename);
> -                             num_filenames++;
> -                     }
> -             }
> -             else
> -             {
> -                     /*
> -                      * stat does not care about permissions, so the most 
> likely reason
> -                      * a file can't be accessed now is if it was removed 
> between the
> -                      * directory listing and now.
> -                      */
> -                     ereport(elevel,
> -                                     (errcode_for_file_access(),
> -                                      errmsg("could not stat file \"%s\": 
> %m",
> -                                                     filename)));
>                       record_config_file_error(psprintf("could not stat file 
> \"%s\"",
>                                                                               
>           filename),
>                                                                        
> calling_file, calling_lineno,
> @@ -1068,6 +1046,18 @@ ParseConfigDirectory(const char *includedir,
>                       status = false;
>                       goto cleanup;
>               }
> +             else if (de_type != PGFILETYPE_DIR)
> +             {
> +                     /* Add file to array, increasing its size in blocks of 
> 32 */
> +                     if (num_filenames >= size_filenames)
> +                     {
> +                             size_filenames += 32;
> +                             filenames = (char **) repalloc(filenames,
> +                                                                             
>            size_filenames * sizeof(char *));
> +                     }
> +                     filenames[num_filenames] = pstrdup(filename);
> +                     num_filenames++;
> +             }
>       }
>  
>       if (num_filenames > 0)

Seems like the diff would be easier to read if it didn't move code around as
much?

Looks pretty reasonable, I'd be happy to commit it, I think.

Greetings,

Andres Freund


Reply via email to