diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2000-11-04 12:43:24 +0000 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2000-11-04 12:43:24 +0000 |
commit | abfb41757405b74e175fb8e6bf632b270de523dc (patch) | |
tree | 38588ff3cabe9886efb2e8cd4cc927a1b2a7f792 /src/backend/utils/init/miscinit.c | |
parent | 7bea44f449bc3ac8090e5ad3fe027e54cb6297b3 (diff) | |
download | postgresql-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.c | 58 |
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: * |