char *nextWALFileName; /* the file we need to get from archive */
char *restartWALFileName; /* the file from which we can restart restore */
char *priorWALFileName; /* the file we need to get from archive */
-char WALFilePath[MAXPGPATH]; /* the file path including archive */
+char WALFilePath[MAXPGPATH * 2]; /* the file path including archive */
char restoreCommand[MAXPGPATH]; /* run this to restore */
char exclusiveCleanupFileName[MAXFNAMELEN]; /* the file we need to
* get from archive */
strcmp(xlde->d_name + 8, exclusiveCleanupFileName + 8) < 0)
{
#ifdef WIN32
- snprintf(WALFilePath, MAXPGPATH, "%s\\%s", archiveLocation, xlde->d_name);
+ snprintf(WALFilePath, sizeof(WALFilePath), "%s\\%s", archiveLocation, xlde->d_name);
#else
- snprintf(WALFilePath, MAXPGPATH, "%s/%s", archiveLocation, xlde->d_name);
+ snprintf(WALFilePath, sizeof(WALFilePath), "%s/%s", archiveLocation, xlde->d_name);
#endif
if (debug)
XLogRecPtr redo;
DIR *mappings_dir;
struct dirent *mapping_de;
- char path[MAXPGPATH];
+ char path[MAXPGPATH + 20];
/*
* We start of with a minimum of the last redo pointer. No new decoding
strcmp(mapping_de->d_name, "..") == 0)
continue;
- snprintf(path, MAXPGPATH, "pg_logical/mappings/%s", mapping_de->d_name);
+ snprintf(path, sizeof(path), "pg_logical/mappings/%s", mapping_de->d_name);
if (lstat(path, &statbuf) == 0 && !S_ISREG(statbuf.st_mode))
continue;
{
DIR *xldir;
struct dirent *xlde;
- char path[MAXPGPATH];
+ char path[MAXPGPATH + sizeof(XLOGDIR)];
xldir = AllocateDir(XLOGDIR);
if (xldir == NULL)
ereport(DEBUG2,
(errmsg("removing transaction log backup history file \"%s\"",
xlde->d_name)));
- snprintf(path, MAXPGPATH, XLOGDIR "/%s", xlde->d_name);
+ snprintf(path, sizeof(path), XLOGDIR "/%s", xlde->d_name);
unlink(path);
XLogArchiveCleanup(xlde->d_name);
}
/* Collect information about all tablespaces */
while ((de = ReadDir(tblspcdir, "pg_tblspc")) != NULL)
{
- char fullpath[MAXPGPATH];
+ char fullpath[MAXPGPATH + 10];
char linkpath[MAXPGPATH];
char *relpath = NULL;
int rllen;
{
DIR *dir;
struct dirent *entry;
- char fname[MAXPGPATH];
+ char fname[MAXPGPATH * 2];
dir = AllocateDir(directory);
while ((entry = ReadDir(dir, directory)) != NULL)
strcmp(entry->d_name + nchars, "stat") != 0)
continue;
- snprintf(fname, MAXPGPATH, "%s/%s", directory,
+ snprintf(fname, sizeof(fname), "%s/%s", directory,
entry->d_name);
unlink(fname);
}
{
DIR *dir;
struct dirent *de;
- char pathbuf[MAXPGPATH];
+ char pathbuf[MAXPGPATH * 2];
struct stat statbuf;
int64 size = 0;
"and should not be used. "
"Try taking another online backup.")));
- snprintf(pathbuf, MAXPGPATH, "%s/%s", path, de->d_name);
+ snprintf(pathbuf, sizeof(pathbuf), "%s/%s", path, de->d_name);
/* Skip postmaster.pid and postmaster.opts in the data directory */
if (strcmp(pathbuf, "./postmaster.pid") == 0 ||
while ((logical_de = ReadDir(logical_dir, "pg_replslot")) != NULL)
{
struct stat statbuf;
- char path[MAXPGPATH];
+ char path[MAXPGPATH * 2 + 12];
if (strcmp(logical_de->d_name, ".") == 0 ||
strcmp(logical_de->d_name, "..") == 0)
XLogRecPtr redo;
DIR *snap_dir;
struct dirent *snap_de;
- char path[MAXPGPATH];
+ char path[MAXPGPATH + 21];
/*
* We start of with a minimum of the last redo pointer. No new replication
strcmp(snap_de->d_name, "..") == 0)
continue;
- snprintf(path, MAXPGPATH, "pg_logical/snapshots/%s", snap_de->d_name);
+ snprintf(path, sizeof(path), "pg_logical/snapshots/%s", snap_de->d_name);
if (lstat(path, &statbuf) == 0 && !S_ISREG(statbuf.st_mode))
{
while ((replication_de = ReadDir(replication_dir, "pg_replslot")) != NULL)
{
struct stat statbuf;
- char path[MAXPGPATH];
+ char path[MAXPGPATH + 12];
if (strcmp(replication_de->d_name, ".") == 0 ||
strcmp(replication_de->d_name, "..") == 0)
continue;
- snprintf(path, MAXPGPATH, "pg_replslot/%s", replication_de->d_name);
+ snprintf(path, sizeof(path), "pg_replslot/%s", replication_de->d_name);
/* we're only creating directories here, skip if it's not our's */
if (lstat(path, &statbuf) == 0 && !S_ISDIR(statbuf.st_mode))
{
ReplicationSlotOnDisk cp;
int i;
- char path[MAXPGPATH];
+ char path[MAXPGPATH + 22];
int fd;
bool restored = false;
int readBytes;
{
DIR *xldir;
struct dirent *xlde;
- char fromfile[MAXPGPATH];
- char tofile[MAXPGPATH];
+ char fromfile[MAXPGPATH * 2];
+ char tofile[MAXPGPATH * 2];
if (mkdir(todir, S_IRWXU) != 0)
ereport(ERROR,
strcmp(xlde->d_name, "..") == 0)
continue;
- snprintf(fromfile, MAXPGPATH, "%s/%s", fromdir, xlde->d_name);
- snprintf(tofile, MAXPGPATH, "%s/%s", todir, xlde->d_name);
+ snprintf(fromfile, sizeof(fromfile), "%s/%s", fromdir, xlde->d_name);
+ snprintf(tofile, sizeof(tofile), "%s/%s", todir, xlde->d_name);
if (lstat(fromfile, &fst) < 0)
ereport(ERROR,
strcmp(xlde->d_name, "..") == 0)
continue;
- snprintf(tofile, MAXPGPATH, "%s/%s", todir, xlde->d_name);
+ snprintf(tofile, sizeof(tofile), "%s/%s", todir, xlde->d_name);
/*
* We don't need to sync subdirectories here since the recursive
void
RemovePgTempFiles(void)
{
- char temp_path[MAXPGPATH];
+ char temp_path[MAXPGPATH + 10 + sizeof(TABLESPACE_VERSION_DIRECTORY) + sizeof(PG_TEMP_FILES_DIR)];
DIR *spc_dir;
struct dirent *spc_de;
{
DIR *temp_dir;
struct dirent *temp_de;
- char rm_path[MAXPGPATH];
+ char rm_path[MAXPGPATH * 2];
temp_dir = AllocateDir(tmpdirname);
if (temp_dir == NULL)
{
DIR *ts_dir;
struct dirent *de;
- char dbspace_path[MAXPGPATH];
+ char dbspace_path[MAXPGPATH * 2];
ts_dir = AllocateDir(tsdirname);
if (ts_dir == NULL)
{
DIR *dbspace_dir;
struct dirent *de;
- char rm_path[MAXPGPATH];
+ char rm_path[MAXPGPATH * 2];
dbspace_dir = AllocateDir(dbspacedirname);
if (dbspace_dir == NULL)
while ((de = ReadDirExtended(dir, path, elevel)) != NULL)
{
- char subpath[MAXPGPATH];
+ char subpath[MAXPGPATH * 2];
struct stat fst;
int sret;
strcmp(de->d_name, "..") == 0)
continue;
- snprintf(subpath, MAXPGPATH, "%s/%s", path, de->d_name);
+ snprintf(subpath, sizeof(subpath), "%s/%s", path, de->d_name);
if (process_symlinks)
sret = stat(subpath, &fst);
void
ResetUnloggedRelations(int op)
{
- char temp_path[MAXPGPATH];
+ char temp_path[MAXPGPATH + 10 + sizeof(TABLESPACE_VERSION_DIRECTORY)];
DIR *spc_dir;
struct dirent *spc_de;
MemoryContext tmpctx,
{
DIR *ts_dir;
struct dirent *de;
- char dbspace_path[MAXPGPATH];
+ char dbspace_path[MAXPGPATH * 2];
ts_dir = AllocateDir(tsdirname);
if (ts_dir == NULL)
{
DIR *dbspace_dir;
struct dirent *de;
- char rm_path[MAXPGPATH];
+ char rm_path[MAXPGPATH * 2];
/* Caller must specify at least one operation. */
Assert((op & (UNLOGGED_RELATION_CLEANUP | UNLOGGED_RELATION_INIT)) != 0);
ForkNumber forkNum;
int oidchars;
char oidbuf[OIDCHARS + 1];
- char srcpath[MAXPGPATH];
+ char srcpath[MAXPGPATH * 2];
char dstpath[MAXPGPATH];
/* Skip anything that doesn't look like a relation data file. */
if (strncmp(dent->d_name, PG_DYNSHMEM_MMAP_FILE_PREFIX,
strlen(PG_DYNSHMEM_MMAP_FILE_PREFIX)) == 0)
{
- char buf[MAXPGPATH];
+ char buf[MAXPGPATH + sizeof(PG_DYNSHMEM_DIR)];
- snprintf(buf, MAXPGPATH, PG_DYNSHMEM_DIR "/%s", dent->d_name);
+ snprintf(buf, sizeof(buf), PG_DYNSHMEM_DIR "/%s", dent->d_name);
elog(DEBUG2, "removing file \"%s\"", buf);
int64 dirsize = 0;
struct dirent *direntry;
DIR *dirdesc;
- char filename[MAXPGPATH];
+ char filename[MAXPGPATH * 2];
dirdesc = AllocateDir(path);
strcmp(direntry->d_name, "..") == 0)
continue;
- snprintf(filename, MAXPGPATH, "%s/%s", path, direntry->d_name);
+ snprintf(filename, sizeof(filename), "%s/%s", path, direntry->d_name);
if (stat(filename, &fst) < 0)
{
DIR *dirdesc;
struct dirent *direntry;
char dirpath[MAXPGPATH];
- char pathname[MAXPGPATH];
+ char pathname[MAXPGPATH + 12 + sizeof(TABLESPACE_VERSION_DIRECTORY)];
AclResult aclresult;
/* User must have connect privilege for target database */
/* Shared storage in pg_global is not counted */
/* Include pg_default storage */
- snprintf(pathname, MAXPGPATH, "base/%u", dbOid);
+ snprintf(pathname, sizeof(pathname), "base/%u", dbOid);
totalsize = db_dir_size(pathname);
/* Scan the non-default tablespaces */
strcmp(direntry->d_name, "..") == 0)
continue;
- snprintf(pathname, MAXPGPATH, "pg_tblspc/%s/%s/%u",
+ snprintf(pathname, sizeof(pathname), "pg_tblspc/%s/%s/%u",
direntry->d_name, TABLESPACE_VERSION_DIRECTORY, dbOid);
totalsize += db_dir_size(pathname);
}
calculate_tablespace_size(Oid tblspcOid)
{
char tblspcPath[MAXPGPATH];
- char pathname[MAXPGPATH];
+ char pathname[MAXPGPATH * 2];
int64 totalsize = 0;
DIR *dirdesc;
struct dirent *direntry;
strcmp(direntry->d_name, "..") == 0)
continue;
- snprintf(pathname, MAXPGPATH, "%s/%s", tblspcPath, direntry->d_name);
+ snprintf(pathname, sizeof(pathname), "%s/%s", tblspcPath, direntry->d_name);
if (stat(pathname, &fst) < 0)
{
const char *tblspcdir = "pg_tblspc";
DIR *dir;
struct dirent *de;
- char path[MAXPGPATH];
+ char path[MAXPGPATH + 10 + sizeof(TABLESPACE_VERSION_DIRECTORY)];
/*
* We zap the shared cache file too. In theory it can't get out of sync
{
DIR *dir;
struct dirent *de;
- char initfilename[MAXPGPATH];
+ char initfilename[MAXPGPATH * 2];
/* Scan the tablespace directory to find per-database directories */
dir = AllocateDir(tblspcpath);
setup_formatted_log_time(void)
{
pg_time_t stamp_time;
- char msbuf[8];
+ char msbuf[13];
if (!saved_timeval_set)
{
void
DeleteAllExportedSnapshotFiles(void)
{
- char buf[MAXPGPATH];
+ char buf[MAXPGPATH + sizeof(SNAPSHOT_EXPORT_DIR)];
DIR *s_dir;
struct dirent *s_de;
strcmp(s_de->d_name, "..") == 0)
continue;
- snprintf(buf, MAXPGPATH, SNAPSHOT_EXPORT_DIR "/%s", s_de->d_name);
+ snprintf(buf, sizeof(buf), SNAPSHOT_EXPORT_DIR "/%s", s_de->d_name);
/* Again, unlink failure is not worthy of FATAL */
if (unlink(buf))
elog(LOG, "could not unlink file \"%s\": %m", buf);
while (errno = 0, (de = readdir(dir)) != NULL)
{
- char subpath[MAXPGPATH];
+ char subpath[MAXPGPATH * 2];
struct stat fst;
int sret;
strcmp(de->d_name, "..") == 0)
continue;
- snprintf(subpath, MAXPGPATH, "%s/%s", path, de->d_name);
+ snprintf(subpath, sizeof(subpath), "%s/%s", path, de->d_name);
if (process_symlinks)
sret = stat(subpath, &fst);
char *archiveLocation; /* where to find the archive? */
char *restartWALFileName; /* the file from which we can restart restore */
-char WALFilePath[MAXPGPATH]; /* the file path including archive */
+char WALFilePath[MAXPGPATH * 2]; /* the file path including archive */
char exclusiveCleanupFileName[MAXFNAMELEN]; /* the oldest file we
* want to remain in
* archive */
* extension that might have been chopped off before testing
* the sequence.
*/
- snprintf(WALFilePath, MAXPGPATH, "%s/%s",
+ snprintf(WALFilePath, sizeof(WALFilePath), "%s/%s",
archiveLocation, xlde->d_name);
if (dryrun)
if (!ispartial)
{
struct stat statbuf;
- char fullpath[MAXPGPATH];
+ char fullpath[MAXPGPATH * 2];
snprintf(fullpath, sizeof(fullpath), "%s/%s", basedir, dirent->d_name);
if (stat(fullpath, &statbuf) != 0)
{
DIR *xldir;
struct dirent *xlde;
- char path[MAXPGPATH];
+ char path[MAXPGPATH + sizeof(XLOGDIR)];
xldir = opendir(XLOGDIR);
if (xldir == NULL)
if (IsXLogFileName(xlde->d_name) ||
IsPartialXLogFileName(xlde->d_name))
{
- snprintf(path, MAXPGPATH, "%s/%s", XLOGDIR, xlde->d_name);
+ snprintf(path, sizeof(path), "%s/%s", XLOGDIR, xlde->d_name);
if (unlink(path) < 0)
{
fprintf(stderr, _("%s: could not delete file \"%s\": %s\n"),
static void
KillExistingArchiveStatus(void)
{
+#define ARCHSTATDIR XLOGDIR "/archive_status"
+
DIR *xldir;
struct dirent *xlde;
- char path[MAXPGPATH];
-
-#define ARCHSTATDIR XLOGDIR "/archive_status"
+ char path[MAXPGPATH + sizeof(ARCHSTATDIR)];
xldir = opendir(ARCHSTATDIR);
if (xldir == NULL)
strcmp(xlde->d_name + XLOG_FNAME_LEN, ".partial.ready") == 0 ||
strcmp(xlde->d_name + XLOG_FNAME_LEN, ".partial.done") == 0))
{
- snprintf(path, MAXPGPATH, "%s/%s", ARCHSTATDIR, xlde->d_name);
+ snprintf(path, sizeof(path), "%s/%s", ARCHSTATDIR, xlde->d_name);
if (unlink(path) < 0)
{
fprintf(stderr, _("%s: could not delete file \"%s\": %s\n"),
while (errno = 0, (xlde = readdir(xldir)) != NULL)
{
struct stat fst;
- char fullpath[MAXPGPATH];
- char path[MAXPGPATH];
+ char fullpath[MAXPGPATH * 2];
+ char path[MAXPGPATH * 2];
if (strcmp(xlde->d_name, ".") == 0 ||
strcmp(xlde->d_name, "..") == 0)
continue;
- snprintf(fullpath, MAXPGPATH, "%s/%s", fullparentpath, xlde->d_name);
+ snprintf(fullpath, sizeof(fullpath), "%s/%s", fullparentpath, xlde->d_name);
if (lstat(fullpath, &fst) < 0)
{
}
if (parentpath)
- snprintf(path, MAXPGPATH, "%s/%s", parentpath, xlde->d_name);
+ snprintf(path, sizeof(path), "%s/%s", parentpath, xlde->d_name);
else
- snprintf(path, MAXPGPATH, "%s", xlde->d_name);
+ snprintf(path, sizeof(path), "%s", xlde->d_name);
if (S_ISREG(fst.st_mode))
callback(path, FILE_TYPE_REGULAR, fst.st_size, NULL);
while (dir->depth >= 0)
{
struct dirent *direntry;
- char fullname[MAXPGPATH];
+ char fullname[MAXPGPATH * 2];
struct stat statbuf;
direntry = ReadDir(dir->dirdesc[dir->depth], dir->dirname[dir->depth]);
if (direntry->d_name[0] == '.')
continue;
- snprintf(fullname, MAXPGPATH, "%s/%s",
+ snprintf(fullname, sizeof(fullname), "%s/%s",
dir->dirname[dir->depth], direntry->d_name);
if (stat(fullname, &statbuf) != 0)
ereport(ERROR,