LCOV - code coverage report
Current view: top level - src/common - pgfnames.c (source / functions) Coverage Total Hit
Test: PostgreSQL 19devel Lines: 0.0 % 25 0
Test Date: 2026-03-12 06:14:44 Functions: 0.0 % 2 0
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /*-------------------------------------------------------------------------
       2              :  *
       3              :  * pgfnames.c
       4              :  *    directory handling functions
       5              :  *
       6              :  * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
       7              :  * Portions Copyright (c) 1994, Regents of the University of California
       8              :  *
       9              :  * IDENTIFICATION
      10              :  *    src/common/pgfnames.c
      11              :  *
      12              :  *-------------------------------------------------------------------------
      13              :  */
      14              : 
      15              : #ifndef FRONTEND
      16              : #include "postgres.h"
      17              : #else
      18              : #include "postgres_fe.h"
      19              : #endif
      20              : 
      21              : #include <dirent.h>
      22              : 
      23              : #ifndef FRONTEND
      24              : #define pg_log_warning(...) elog(WARNING, __VA_ARGS__)
      25              : #else
      26              : #include "common/logging.h"
      27              : #endif
      28              : 
      29              : /*
      30              :  * pgfnames
      31              :  *
      32              :  * return a list of the names of objects in the argument directory.  Caller
      33              :  * must call pgfnames_cleanup later to free the memory allocated by this
      34              :  * function.
      35              :  */
      36              : char      **
      37            0 : pgfnames(const char *path)
      38              : {
      39              :     DIR        *dir;
      40              :     struct dirent *file;
      41              :     char      **filenames;
      42            0 :     int         numnames = 0;
      43            0 :     int         fnsize = 200;   /* enough for many small dbs */
      44              : 
      45            0 :     dir = opendir(path);
      46            0 :     if (dir == NULL)
      47              :     {
      48            0 :         pg_log_warning("could not open directory \"%s\": %m", path);
      49            0 :         return NULL;
      50              :     }
      51              : 
      52            0 :     filenames = palloc_array(char *, fnsize);
      53              : 
      54            0 :     while (errno = 0, (file = readdir(dir)) != NULL)
      55              :     {
      56            0 :         if (strcmp(file->d_name, ".") != 0 && strcmp(file->d_name, "..") != 0)
      57              :         {
      58            0 :             if (numnames + 1 >= fnsize)
      59              :             {
      60            0 :                 fnsize *= 2;
      61            0 :                 filenames = repalloc_array(filenames, char *, fnsize);
      62              :             }
      63            0 :             filenames[numnames++] = pstrdup(file->d_name);
      64              :         }
      65              :     }
      66              : 
      67            0 :     if (errno)
      68            0 :         pg_log_warning("could not read directory \"%s\": %m", path);
      69              : 
      70            0 :     filenames[numnames] = NULL;
      71              : 
      72            0 :     if (closedir(dir))
      73            0 :         pg_log_warning("could not close directory \"%s\": %m", path);
      74              : 
      75            0 :     return filenames;
      76              : }
      77              : 
      78              : 
      79              : /*
      80              :  *  pgfnames_cleanup
      81              :  *
      82              :  *  deallocate memory used for filenames
      83              :  */
      84              : void
      85            0 : pgfnames_cleanup(char **filenames)
      86              : {
      87              :     char      **fn;
      88              : 
      89            0 :     for (fn = filenames; *fn; fn++)
      90            0 :         pfree(*fn);
      91              : 
      92            0 :     pfree(filenames);
      93            0 : }
        

Generated by: LCOV version 2.0-1