mirror of https://github.com/postgres/postgres
parent
cab5dc5daf
commit
ba7c5975ad
@ -1,5 +1,5 @@ |
|||||||
# src/bin/initdb/nls.mk
|
# src/bin/initdb/nls.mk
|
||||||
CATALOG_NAME = initdb
|
CATALOG_NAME = initdb
|
||||||
AVAIL_LANGUAGES = cs de es fr it ja pl pt_BR ru zh_CN
|
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
|
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