Move pgfnames() from libpgport to libpgcommon
It requires pstrdup() from libpgcommon.
This commit is contained in:
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
|
||||||
|
|
|
@ -23,7 +23,7 @@ include $(top_builddir)/src/Makefile.global
|
||||||
override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
|
override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
|
||||||
LIBS += $(PTHREAD_LIBS)
|
LIBS += $(PTHREAD_LIBS)
|
||||||
|
|
||||||
OBJS_COMMON = exec.o relpath.o wait_error.o
|
OBJS_COMMON = exec.o pgfnames.o relpath.o wait_error.o
|
||||||
|
|
||||||
OBJS_FRONTEND = $(OBJS_COMMON) fe_memutils.o
|
OBJS_FRONTEND = $(OBJS_COMMON) fe_memutils.o
|
||||||
|
|
||||||
|
|
109
src/common/pgfnames.c
Normal file
109
src/common/pgfnames.c
Normal file
|
@ -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);
|
||||||
|
}
|
|
@ -28,7 +28,6 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <dirent.h>
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#if defined(WIN32) || defined(__CYGWIN__)
|
#if defined(WIN32) || defined(__CYGWIN__)
|
||||||
|
@ -352,95 +351,6 @@ pgwin32_is_junction(char *path)
|
||||||
#endif /* defined(WIN32) && !defined(__CYGWIN__) */
|
#endif /* defined(WIN32) && !defined(__CYGWIN__) */
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* rmtree
|
* rmtree
|
||||||
*
|
*
|
||||||
|
|
|
@ -74,7 +74,7 @@ sub mkvcbuild
|
||||||
win32error.c win32setlocale.c);
|
win32error.c win32setlocale.c);
|
||||||
|
|
||||||
our @pgcommonallfiles = qw(
|
our @pgcommonallfiles = qw(
|
||||||
exec.c relpath.c wait_error.c);
|
exec.c pgfnames.c relpath.c wait_error.c);
|
||||||
|
|
||||||
our @pgcommonfrontendfiles = (@pgcommonallfiles, qw(fe_memutils.c));
|
our @pgcommonfrontendfiles = (@pgcommonallfiles, qw(fe_memutils.c));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue