aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/init/miscinit.c
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2000-11-04 12:43:24 +0000
committerPeter Eisentraut <peter_e@gmx.net>2000-11-04 12:43:24 +0000
commitabfb41757405b74e175fb8e6bf632b270de523dc (patch)
tree38588ff3cabe9886efb2e8cd4cc927a1b2a7f792 /src/backend/utils/init/miscinit.c
parent7bea44f449bc3ac8090e5ad3fe027e54cb6297b3 (diff)
downloadpostgresql-abfb41757405b74e175fb8e6bf632b270de523dc.tar.gz
postgresql-abfb41757405b74e175fb8e6bf632b270de523dc.zip
Make the backend grok relative paths for the data directory by converting
it to an absolute path.
Diffstat (limited to 'src/backend/utils/init/miscinit.c')
-rw-r--r--src/backend/utils/init/miscinit.c58
1 files changed, 57 insertions, 1 deletions
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index 0974a057159..026f2cc8114 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.55 2000/09/19 18:17:57 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.56 2000/11/04 12:43:24 petere Exp $
*
*-------------------------------------------------------------------------
*/
@@ -367,6 +367,62 @@ GetUserName(Oid userid)
/*-------------------------------------------------------------------------
+ * Set data directory, but make sure it's an absolute path. Use this,
+ * never set DataDir directly.
+ *-------------------------------------------------------------------------
+ */
+void
+SetDataDir(const char *dir)
+{
+ char *new;
+
+ AssertArg(dir);
+ if (DataDir)
+ free(DataDir);
+
+ if (dir[0] != '/')
+ {
+ char *buf;
+ size_t buflen;
+
+ buflen = MAXPGPATH;
+ for (;;)
+ {
+ buf = malloc(buflen);
+ if (!buf)
+ elog(FATAL, "out of memory");
+
+ if (getcwd(buf, buflen))
+ break;
+ else if (errno == ERANGE)
+ {
+ free(buf);
+ buflen *= 2;
+ continue;
+ }
+ else
+ {
+ free(buf);
+ elog(FATAL, "cannot get current working directory: %m");
+ }
+ }
+
+ new = malloc(strlen(buf) + 1 + strlen(dir) + 1);
+ sprintf(new, "%s/%s", buf, dir);
+ }
+ else
+ {
+ new = strdup(dir);
+ }
+
+ if (!new)
+ elog(FATAL, "out of memory");
+ DataDir = new;
+}
+
+
+
+/*-------------------------------------------------------------------------
*
* postmaster pid file stuffs. $DATADIR/postmaster.pid is created when:
*