"pg_snapshots",
"pg_subtrans",
"pg_twophase",
+ "pg_multixact",
"pg_multixact/members",
"pg_multixact/offsets",
"base",
static void exit_nicely(void);
static char *get_id(void);
static char *get_encoding_id(char *encoding_name);
-static bool mkdatadir(const char *subdir);
static void set_input(char **dest, char *filename);
static void check_input(char *path);
static void write_version_file(char *extrapath);
}
-/*
- * make the data directory (or one of its subdirectories if subdir is not NULL)
- */
-static bool
-mkdatadir(const char *subdir)
-{
- char *path;
-
- if (subdir)
- path = psprintf("%s/%s", pg_data, subdir);
- else
- path = pg_strdup(pg_data);
-
- if (pg_mkdir_p(path, S_IRWXU) == 0)
- return true;
-
- fprintf(stderr, _("%s: could not create directory \"%s\": %s\n"),
- progname, path, strerror(errno));
-
- return false;
-}
-
-
/*
* set name of given input file variable under data directory
*/
pg_data);
fflush(stdout);
- if (!mkdatadir(NULL))
+ if (pg_mkdir_p(pg_data, S_IRWXU) != 0)
+ {
+ fprintf(stderr, _("%s: could not create directory \"%s\": %s\n"),
+ progname, pg_data, strerror(errno));
exit_nicely();
+ }
else
check_ok();
printf(_("creating subdirectories ... "));
fflush(stdout);
- for (i = 0; i < (sizeof(subdirs) / sizeof(char *)); i++)
+ for (i = 0; i < lengthof(subdirs); i++)
{
- if (!mkdatadir(subdirs[i]))
+ char *path;
+
+ path = psprintf("%s/%s", pg_data, subdirs[i]);
+
+ /*
+ * The parent directory already exists, so we only need mkdir() not
+ * pg_mkdir_p() here, which avoids some failure modes; cf bug #13853.
+ */
+ if (mkdir(path, S_IRWXU) < 0)
+ {
+ fprintf(stderr, _("%s: could not create directory \"%s\": %s\n"),
+ progname, path, strerror(errno));
exit_nicely();
+ }
+
+ free(path);
}
check_ok();