From 067f1e5fa85db901ba6b438c859420dceee0841f Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 26 Jun 2008 02:47:19 +0000 Subject: [PATCH] Fix 'pg_ctl restart' to preserve command-line arguments. --- src/backend/postmaster/postmaster.c | 4 ++-- src/bin/pg_ctl/pg_ctl.c | 26 ++++++++++++++++---------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 8d94408a48..6f00e5ad34 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.560 2008/06/26 01:35:45 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.561 2008/06/26 02:47:19 momjian Exp $ * * NOTES * @@ -4184,7 +4184,7 @@ CreateOptsFile(int argc, char *argv[], char *fullprogname) fprintf(fp, "%s", fullprogname); for (i = 1; i < argc; i++) - fprintf(fp, " " SYSTEMQUOTE "%s" SYSTEMQUOTE, argv[i]); + fprintf(fp, " \"%s\"", argv[i]); fputs("\n", fp); if (fclose(fp)) diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c index 84cb35125d..310d1775d2 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-2008, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.100 2008/06/26 01:35:45 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.101 2008/06/26 02:47:19 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -573,11 +573,11 @@ read_post_opts(void) { if (post_opts == NULL) { - char **optlines; - post_opts = ""; /* defatult */ if (ctl_command == RESTART_COMMAND) { + char **optlines; + optlines = readfile(postopts_file); if (optlines == NULL) { @@ -593,20 +593,26 @@ read_post_opts(void) else { int len; - char *optline = NULL; + char *optline; char *arg1; optline = optlines[0]; + /* trim off line endings */ len = strcspn(optline, "\r\n"); optline[len] = '\0'; - arg1 = strchr(optline, *SYSTEMQUOTE); - if (arg1 == NULL || arg1 == optline) - post_opts = ""; - else + for (arg1 = optline; *arg1; arg1++) { - *(arg1 - 1) = '\0'; /* this should be a space */ - post_opts = arg1; + /* + * Are we at the first option, as defined by space, + * double-quote, and a dash? + */ + if (*arg1 == ' ' && *(arg1+1) == '"' && *(arg1+2) == '-') + { + *arg1 = '\0'; /* terminate so we get only program name */ + post_opts = arg1 + 1; /* point past whitespace */ + break; + } } if (postgres_path != NULL) postgres_path = optline; -- 2.40.0