mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-12 18:34:36 +08:00
Canonicalize Win32 path coming in from pg_ctl -D, idea from Magnus.
This commit is contained in:
parent
118bd91809
commit
3fe704209a
@ -4,7 +4,7 @@
|
|||||||
*
|
*
|
||||||
* Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.42 2004/10/22 00:24:18 tgl Exp $
|
* $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.43 2004/10/27 17:17:07 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -1279,19 +1279,23 @@ main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
case 'D':
|
case 'D':
|
||||||
{
|
{
|
||||||
int len = strlen(optarg);
|
char *pgdata_D = xmalloc(strlen(optarg));
|
||||||
char *env_var;
|
char *env_var = xmalloc(strlen(optarg) + 8);
|
||||||
|
|
||||||
env_var = xmalloc(len + 8);
|
strcpy(pgdata_D, optarg);
|
||||||
snprintf(env_var, len + 8, "PGDATA=%s", optarg);
|
canonicalize_path(pgdata_D);
|
||||||
|
snprintf(env_var, strlen(pgdata_D) + 8, "PGDATA=%s",
|
||||||
|
pgdata_D);
|
||||||
putenv(env_var);
|
putenv(env_var);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Show -D for easier postmaster 'ps'
|
* We could pass PGDATA just in an environment
|
||||||
* identification
|
* variable but we do -D too for clearer
|
||||||
|
* postmaster 'ps' display
|
||||||
*/
|
*/
|
||||||
pgdata_opt = xmalloc(len + 7);
|
pgdata_opt = xmalloc(strlen(pgdata_D) + 7);
|
||||||
snprintf(pgdata_opt, len + 7, "-D \"%s\" ", optarg);
|
snprintf(pgdata_opt, strlen(pgdata_D) + 7, "-D \"%s\" ",
|
||||||
|
pgdata_D);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'l':
|
case 'l':
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/port/path.c,v 1.37 2004/10/24 22:08:19 tgl Exp $
|
* $PostgreSQL: pgsql/src/port/path.c,v 1.38 2004/10/27 17:17:09 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -115,7 +115,12 @@ make_native_path(char *filename)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make all paths look like Unix
|
* Clean up path by:
|
||||||
|
* o make Win32 path use Unix slashes
|
||||||
|
* o remove trailling quote on Win32
|
||||||
|
* o remove trailling slash
|
||||||
|
* o remove trailing '.'
|
||||||
|
* o process trailing '..' ourselves
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
canonicalize_path(char *path)
|
canonicalize_path(char *path)
|
||||||
@ -145,13 +150,13 @@ canonicalize_path(char *path)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Removing the trailing slash on a path means we never get ugly
|
* Removing the trailing slash on a path means we never get ugly
|
||||||
* double slashes. Also, Win32 can't stat() a directory with a
|
* double trailing slashes. Also, Win32 can't stat() a directory
|
||||||
* trailing slash. Don't remove a leading slash, though.
|
* with a trailing slash. Don't remove a leading slash, though.
|
||||||
*/
|
*/
|
||||||
trim_trailing_separator(path);
|
trim_trailing_separator(path);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Remove any trailing uses of "." or "..", too.
|
* Remove any trailing uses of "." and process ".." ourselves
|
||||||
*/
|
*/
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
@ -165,7 +170,7 @@ canonicalize_path(char *path)
|
|||||||
else if (len >= 3 && strcmp(path + len - 3, "/..") == 0)
|
else if (len >= 3 && strcmp(path + len - 3, "/..") == 0)
|
||||||
{
|
{
|
||||||
trim_directory(path);
|
trim_directory(path);
|
||||||
trim_directory(path);
|
trim_directory(path); /* remove directory above */
|
||||||
trim_trailing_separator(path);
|
trim_trailing_separator(path);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user