summaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorBruce Momjian2003-04-04 20:42:13 +0000
committerBruce Momjian2003-04-04 20:42:13 +0000
commitd46e6438225d8741100dc400a4a63c87799f0945 (patch)
treec20b838ead99ca2558a188b84595115538c02dd2 /src/backend
parent9bad936f67cb7561d0d232ca365e23fe73219a1a (diff)
Add Win32 path handling for / vs. \ and drive letters.
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/commands/copy.c4
-rw-r--r--src/backend/commands/dbcommands.c8
-rw-r--r--src/backend/storage/file/fd.c4
-rw-r--r--src/backend/utils/fmgr/dfmgr.c16
-rw-r--r--src/backend/utils/init/findbe.c10
-rw-r--r--src/backend/utils/init/miscinit.c10
-rw-r--r--src/backend/utils/misc/database.c8
7 files changed, 35 insertions, 25 deletions
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 978429c87f7..0f20bfb2aea 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.190 2003/03/27 16:51:27 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.191 2003/04/04 20:42:11 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -476,7 +476,7 @@ DoCopy(const CopyStmt *stmt)
* Prevent write to relative path ... too easy to shoot
* oneself in the foot by overwriting a database file ...
*/
- if (filename[0] != '/')
+ if (!is_absolute_path(filename))
elog(ERROR, "Relative path not allowed for server side"
" COPY command");
diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c
index 32c4c459c9a..3ef778c9648 100644
--- a/src/backend/commands/dbcommands.c
+++ b/src/backend/commands/dbcommands.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.111 2003/04/04 20:40:44 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.112 2003/04/04 20:42:12 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -698,9 +698,9 @@ resolve_alt_dbpath(const char *dbpath, Oid dboid)
if (dbpath == NULL || dbpath[0] == '\0')
return NULL;
- if (strchr(dbpath, '/'))
+ if (first_path_separator(dbpath))
{
- if (dbpath[0] != '/')
+ if (!is_absolute_path(dbpath))
elog(ERROR, "Relative paths are not allowed as database locations");
#ifndef ALLOW_ABSOLUTE_DBPATHS
elog(ERROR, "Absolute paths are not allowed as database locations");
@@ -714,7 +714,7 @@ resolve_alt_dbpath(const char *dbpath, Oid dboid)
if (!var)
elog(ERROR, "Postmaster environment variable '%s' not set", dbpath);
- if (var[0] != '/')
+ if (!is_absolute_path(var))
elog(ERROR, "Postmaster environment variable '%s' must be absolute path", dbpath);
prefix = var;
}
diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c
index 7607d4186cc..b84e2cb82d1 100644
--- a/src/backend/storage/file/fd.c
+++ b/src/backend/storage/file/fd.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/file/fd.c,v 1.96 2003/03/27 16:51:29 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/file/fd.c,v 1.97 2003/04/04 20:42:12 momjian Exp $
*
* NOTES:
*
@@ -607,7 +607,7 @@ filepath(const char *filename)
char *buf;
/* Not an absolute path name? Then fill in with database path... */
- if (*filename != '/')
+ if (!is_absolute_path(filename))
{
buf = (char *) palloc(strlen(DatabasePath) + strlen(filename) + 2);
sprintf(buf, "%s/%s", DatabasePath, filename);
diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c
index d8e6ff3ee10..c7f79df416d 100644
--- a/src/backend/utils/fmgr/dfmgr.c
+++ b/src/backend/utils/fmgr/dfmgr.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.57 2002/09/02 02:47:05 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.58 2003/04/04 20:42:12 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -271,7 +271,7 @@ expand_dynamic_library_name(const char *name)
AssertArg(name);
- have_slash = (strchr(name, '/') != NULL);
+ have_slash = (first_path_separator(name) != NULL);
if (!have_slash)
{
@@ -326,7 +326,13 @@ substitute_libpath_macro(const char *name)
if (name[0] != '$')
return pstrdup(name);
- macroname_len = strcspn(name + 1, "/") + 1;
+ macroname_len = strcspn(name + 1,
+#ifndef WIN32
+ "/"
+#else
+ "/\\"
+#endif
+ ) + 1;
if (strncmp(name, "$libdir", macroname_len) == 0)
replacement = PKGLIBDIR;
@@ -362,7 +368,7 @@ find_in_dynamic_libpath(const char *basename)
size_t baselen;
AssertArg(basename != NULL);
- AssertArg(strchr(basename, '/') == NULL);
+ AssertArg(first_path_separator(basename) == NULL);
AssertState(Dynamic_library_path != NULL);
p = Dynamic_library_path;
@@ -391,7 +397,7 @@ find_in_dynamic_libpath(const char *basename)
pfree(piece);
/* only absolute paths */
- if (mangled[0] != '/')
+ if (!is_absolute_path(mangled))
elog(ERROR, "dynamic_library_path component is not absolute");
full = palloc(strlen(mangled) + 1 + baselen + 1);
diff --git a/src/backend/utils/init/findbe.c b/src/backend/utils/init/findbe.c
index ce5c521f3e0..94d744bce9c 100644
--- a/src/backend/utils/init/findbe.c
+++ b/src/backend/utils/init/findbe.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/init/Attic/findbe.c,v 1.31 2002/11/02 15:54:13 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/init/Attic/findbe.c,v 1.32 2003/04/04 20:42:12 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -159,14 +159,14 @@ FindExec(char *full_path, const char *argv0, const char *binary_name)
* (making sure that a relative path is made absolute before returning
* it).
*/
- if (argv0 && (p = strrchr(argv0, '/')) && *++p)
+ if (argv0 && (p = last_path_separator(argv0)) && *++p)
{
- if (*argv0 == '/' || !getcwd(buf, MAXPGPATH))
+ if (is_absolute_path(argv0) || !getcwd(buf, MAXPGPATH))
buf[0] = '\0';
else
strcat(buf, "/");
strcat(buf, argv0);
- p = strrchr(buf, '/');
+ p = last_path_separator(buf);
strcpy(++p, binary_name);
if (ValidateBinary(buf) == 0)
{
@@ -194,7 +194,7 @@ FindExec(char *full_path, const char *argv0, const char *binary_name)
continue;
if (endp)
*endp = '\0';
- if (*startp == '/' || !getcwd(buf, MAXPGPATH))
+ if (is_absolute_path(startp) || !getcwd(buf, MAXPGPATH))
buf[0] = '\0';
else
strcat(buf, "/");
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index 8b49ca2e584..6ffd1e01b97 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.101 2003/03/20 04:51:44 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.102 2003/04/04 20:42:12 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -134,7 +134,7 @@ SetDataDir(const char *dir)
AssertArg(dir);
/* If presented path is relative, convert to absolute */
- if (dir[0] != '/')
+ if (!is_absolute_path(dir))
{
char *buf;
size_t buflen;
@@ -179,7 +179,11 @@ SetDataDir(const char *dir)
* generating funny-looking paths to individual files.
*/
newlen = strlen(new);
- if (newlen > 1 && new[newlen - 1] == '/')
+ if (newlen > 1 && new[newlen - 1] == '/'
+#ifdef WIN32
+ || new[newlen - 1] == '\\'
+#endif
+ )
new[newlen - 1] = '\0';
if (DataDir)
diff --git a/src/backend/utils/misc/database.c b/src/backend/utils/misc/database.c
index 981d7ea7dcc..ce8e6fb5fac 100644
--- a/src/backend/utils/misc/database.c
+++ b/src/backend/utils/misc/database.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/misc/Attic/database.c,v 1.55 2003/03/10 22:28:19 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/misc/Attic/database.c,v 1.56 2003/04/04 20:42:12 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -50,10 +50,10 @@ ExpandDatabasePath(const char *dbpath)
return NULL; /* ain't gonna fit nohow */
/* leading path delimiter? then already absolute path */
- if (*dbpath == '/')
+ if (is_absolute_path(dbpath))
{
#ifdef ALLOW_ABSOLUTE_DBPATHS
- cp = strrchr(dbpath, '/');
+ cp = last_path_separator(dbpath);
len = cp - dbpath;
strncpy(buf, dbpath, len);
snprintf(&buf[len], MAXPGPATH - len, "/base/%s", (cp + 1));
@@ -62,7 +62,7 @@ ExpandDatabasePath(const char *dbpath)
#endif
}
/* path delimiter somewhere? then has leading environment variable */
- else if ((cp = strchr(dbpath, '/')) != NULL)
+ else if ((cp = first_path_separator(dbpath)) != NULL)
{
const char *envvar;