aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/misc/database.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>1999-10-25 03:08:03 +0000
committerTom Lane <tgl@sss.pgh.pa.us>1999-10-25 03:08:03 +0000
commit51f62d505e2aba66bf7870c7bd005cd32e7d0953 (patch)
tree127e7cbbf6679dbc2e3cfd08786ab88a7a801f50 /src/backend/utils/misc/database.c
parent8a17ed63359325c567694fdd378e71803a53cc73 (diff)
downloadpostgresql-51f62d505e2aba66bf7870c7bd005cd32e7d0953.tar.gz
postgresql-51f62d505e2aba66bf7870c7bd005cd32e7d0953.zip
Standardize on MAXPGPATH as the size of a file pathname buffer,
eliminating some wildly inconsistent coding in various parts of the system. I set MAXPGPATH = 1024 in config.h.in. If anyone is really convinced that there ought to be a configure-time test to set the value, go right ahead ... but I think it's a waste of time.
Diffstat (limited to 'src/backend/utils/misc/database.c')
-rw-r--r--src/backend/utils/misc/database.c50
1 files changed, 28 insertions, 22 deletions
diff --git a/src/backend/utils/misc/database.c b/src/backend/utils/misc/database.c
index f5ff732b8f2..cda5cfbdab3 100644
--- a/src/backend/utils/misc/database.c
+++ b/src/backend/utils/misc/database.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/misc/Attic/database.c,v 1.30 1999/09/24 00:25:04 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/misc/Attic/database.c,v 1.31 1999/10/25 03:07:52 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -30,7 +30,7 @@ GetDatabaseInfo(char *name, int4 *owner, char *path)
{
Oid dbowner,
dbid;
- char dbpath[MAXPGPATH + 1];
+ char dbpath[MAXPGPATH];
text *dbtext;
Relation dbrel;
@@ -86,8 +86,7 @@ GetDatabaseInfo(char *name, int4 *owner, char *path)
owner = palloc(sizeof(Oid));
*owner = dbowner;
- path = palloc(strlen(dbpath) + 1);
- strcpy(path, dbpath);
+ path = pstrdup(dbpath); /* doesn't do the right thing! */
return FALSE;
} /* GetDatabaseInfo() */
@@ -97,46 +96,53 @@ GetDatabaseInfo(char *name, int4 *owner, char *path)
char *
ExpandDatabasePath(char *dbpath)
{
- char *path;
+ char buf[MAXPGPATH];
char *cp;
- char buf[MAXPGPATH + 1];
+ char *envvar;
+ int len;
+
+ if (strlen(dbpath) >= MAXPGPATH)
+ return NULL; /* ain't gonna fit nohow */
/* leading path delimiter? then already absolute path */
if (*dbpath == SEP_CHAR)
{
#ifdef ALLOW_ABSOLUTE_DBPATHS
cp = strrchr(dbpath, SEP_CHAR);
- strncpy(buf, dbpath, (cp - dbpath));
- sprintf(&buf[cp - dbpath], "%cbase%c%s", SEP_CHAR, SEP_CHAR, (cp + 1));
+ len = cp - dbpath;
+ strncpy(buf, dbpath, len);
+ snprintf(&buf[len], MAXPGPATH-len, "%cbase%c%s",
+ SEP_CHAR, SEP_CHAR, (cp + 1));
#else
return NULL;
#endif
}
/* path delimiter somewhere? then has leading environment variable */
- else if (strchr(dbpath, SEP_CHAR) != NULL)
+ else if ((cp = strchr(dbpath, SEP_CHAR)) != NULL)
{
- cp = strchr(dbpath, SEP_CHAR);
- strncpy(buf, dbpath, (cp - dbpath));
- buf[cp - dbpath] = '\0';
- path = getenv(buf);
+ len = cp - dbpath;
+ strncpy(buf, dbpath, len);
+ buf[len] = '\0';
+ envvar = getenv(buf);
/*
* problem getting environment variable? let calling routine
* handle it
*/
- if (path == NULL)
- return path;
+ if (envvar == NULL)
+ return envvar;
- sprintf(buf, "%s%cbase%c%s", path, SEP_CHAR, SEP_CHAR, (cp + 1));
+ snprintf(buf, sizeof(buf), "%s%cbase%c%s",
+ envvar, SEP_CHAR, SEP_CHAR, (cp + 1));
}
- /* no path delimiter? then add the default path prefixes */
else
- sprintf(buf, "%s%cbase%c%s", DataDir, SEP_CHAR, SEP_CHAR, dbpath);
-
- path = palloc(strlen(buf) + 1);
- strcpy(path, buf);
+ {
+ /* no path delimiter? then add the default path prefix */
+ snprintf(buf, sizeof(buf), "%s%cbase%c%s",
+ DataDir, SEP_CHAR, SEP_CHAR, dbpath);
+ }
- return path;
+ return pstrdup(buf);
} /* ExpandDatabasePath() */