mirror of https://github.com/postgres/postgres
parent
cab5dc5daf
commit
ba7c5975ad
@ -1,5 +1,5 @@ |
||||
# src/bin/initdb/nls.mk
|
||||
CATALOG_NAME = initdb
|
||||
AVAIL_LANGUAGES = cs de es fr it ja pl pt_BR ru zh_CN
|
||||
GETTEXT_FILES = findtimezone.c initdb.c ../../common/exec.c ../../common/fe_memutils.c ../../common/wait_error.c ../../port/dirmod.c
|
||||
GETTEXT_FILES = findtimezone.c initdb.c ../../common/exec.c ../../common/fe_memutils.c ../../common/pgfnames.c ../../common/wait_error.c ../../port/dirmod.c
|
||||
GETTEXT_TRIGGERS = simple_prompt
|
||||
|
@ -0,0 +1,109 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* pgfnames.c |
||||
* directory handling functions |
||||
* |
||||
* Portions Copyright (c) 1996-2013, PostgreSQL Global Development Group |
||||
* Portions Copyright (c) 1994, Regents of the University of California |
||||
* |
||||
* IDENTIFICATION |
||||
* src/common/pgfnames.c |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
#ifndef FRONTEND |
||||
#include "postgres.h" |
||||
#else |
||||
#include "postgres_fe.h" |
||||
#endif |
||||
|
||||
#include <dirent.h> |
||||
|
||||
/*
|
||||
* pgfnames |
||||
* |
||||
* return a list of the names of objects in the argument directory. Caller |
||||
* must call pgfnames_cleanup later to free the memory allocated by this |
||||
* function. |
||||
*/ |
||||
char ** |
||||
pgfnames(const char *path) |
||||
{ |
||||
DIR *dir; |
||||
struct dirent *file; |
||||
char **filenames; |
||||
int numnames = 0; |
||||
int fnsize = 200; /* enough for many small dbs */ |
||||
|
||||
dir = opendir(path); |
||||
if (dir == NULL) |
||||
{ |
||||
#ifndef FRONTEND |
||||
elog(WARNING, "could not open directory \"%s\": %m", path); |
||||
#else |
||||
fprintf(stderr, _("could not open directory \"%s\": %s\n"), |
||||
path, strerror(errno)); |
||||
#endif |
||||
return NULL; |
||||
} |
||||
|
||||
filenames = (char **) palloc(fnsize * sizeof(char *)); |
||||
|
||||
errno = 0; |
||||
while ((file = readdir(dir)) != NULL) |
||||
{ |
||||
if (strcmp(file->d_name, ".") != 0 && strcmp(file->d_name, "..") != 0) |
||||
{ |
||||
if (numnames + 1 >= fnsize) |
||||
{ |
||||
fnsize *= 2; |
||||
filenames = (char **) repalloc(filenames, |
||||
fnsize * sizeof(char *)); |
||||
} |
||||
filenames[numnames++] = pstrdup(file->d_name); |
||||
} |
||||
errno = 0; |
||||
} |
||||
#ifdef WIN32 |
||||
|
||||
/*
|
||||
* This fix is in mingw cvs (runtime/mingwex/dirent.c rev 1.4), but not in |
||||
* released version |
||||
*/ |
||||
if (GetLastError() == ERROR_NO_MORE_FILES) |
||||
errno = 0; |
||||
#endif |
||||
if (errno) |
||||
{ |
||||
#ifndef FRONTEND |
||||
elog(WARNING, "could not read directory \"%s\": %m", path); |
||||
#else |
||||
fprintf(stderr, _("could not read directory \"%s\": %s\n"), |
||||
path, strerror(errno)); |
||||
#endif |
||||
} |
||||
|
||||
filenames[numnames] = NULL; |
||||
|
||||
closedir(dir); |
||||
|
||||
return filenames; |
||||
} |
||||
|
||||
|
||||
/*
|
||||
* pgfnames_cleanup |
||||
* |
||||
* deallocate memory used for filenames |
||||
*/ |
||||
void |
||||
pgfnames_cleanup(char **filenames) |
||||
{ |
||||
char **fn; |
||||
|
||||
for (fn = filenames; *fn; fn++) |
||||
pfree(*fn); |
||||
|
||||
pfree(filenames); |
||||
} |
Loading…
Reference in new issue