From a4c71af2c01c4a3def06905356f47b99f2a753d1 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 12 Jul 2004 19:15:14 +0000 Subject: [PATCH] Put back canonicalization of PGDATA environment variable. --- src/backend/postmaster/postmaster.c | 7 +++++-- src/bin/pg_ctl/pg_ctl.c | 7 +++++-- src/port/path.c | 26 ++++++++++++++++++-------- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 208175c2c6..7edd43ce6b 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -37,7 +37,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.410 2004/07/12 18:17:13 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.411 2004/07/12 19:14:56 momjian Exp $ * * NOTES * @@ -526,7 +526,10 @@ PostmasterMain(int argc, char *argv[]) } if (userPGDATA) - canonicalize_path(userPGDATA = strdup(userPGDATA)); + { + userPGDATA = strdup(userPGDATA); + canonicalize_path(userPGDATA); + } if (onlyConfigSpecified(userPGDATA)) { diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c index 6cd562345c..13f0561b3a 100644 --- a/src/bin/pg_ctl/pg_ctl.c +++ b/src/bin/pg_ctl/pg_ctl.c @@ -4,7 +4,7 @@ * * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.19 2004/07/12 18:17:13 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.20 2004/07/12 19:15:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -1308,7 +1308,10 @@ main(int argc, char **argv) /* Note we put any -D switch into the env var above */ pg_data = getenv("PGDATA"); if (pg_data) - canonicalize_path(pg_data = xstrdup(pg_data)); + { + /* XXX modifies environment var in-place ... ugly ... */ + canonicalize_path(pg_data); + } if (pg_data == NULL && ctl_command != KILL_COMMAND && ctl_command != UNREGISTER_COMMAND) diff --git a/src/port/path.c b/src/port/path.c index 9a796af4da..b9958acb74 100644 --- a/src/port/path.c +++ b/src/port/path.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/port/path.c,v 1.23 2004/07/11 21:34:04 momjian Exp $ + * $PostgreSQL: pgsql/src/port/path.c,v 1.24 2004/07/12 19:15:14 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -88,18 +88,17 @@ last_dir_separator(const char *filename) /* - * make all paths look like unix, with forward slashes - * also strip any trailing slash. - * - * The Windows command processor will accept suitably quoted paths - * with forward slashes, but barfs badly with mixed forward and back - * slashes. Removing the trailing slash on a path means we never get - * ugly double slashes. Don't remove a leading slash, though. + * Make all paths look like Unix */ void canonicalize_path(char *path) { #ifdef WIN32 + /* + * The Windows command processor will accept suitably quoted paths + * with forward slashes, but barfs badly with mixed forward and back + * slashes. + */ char *p; for (p = path; *p; p++) @@ -107,8 +106,19 @@ canonicalize_path(char *path) if (*p == '\\') *p = '/'; } + /* In Win32, if you do: + * prog.exe "a b" "\c\d\" + * the system will pass \c\d" as argv[2]. + */ + if (p > path && *(p-1) == '"') + *(p-1) = '/'; #endif + /* + * Removing the trailing slash on a path means we never get + * ugly double slashes. Don't remove a leading slash, though. + * Also, Win32 can't stat() a directory with a trailing slash. + */ trim_trailing_separator(path); } -- 2.40.0