aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2008-06-26 02:47:19 +0000
committerBruce Momjian <bruce@momjian.us>2008-06-26 02:47:19 +0000
commit067f1e5fa85db901ba6b438c859420dceee0841f (patch)
treeb0e47b6e9702a1f668612c6d6a7dba6d370d2b8a /src
parenta1183238be9a26be09438c72785d773907592f9b (diff)
downloadpostgresql-067f1e5fa85db901ba6b438c859420dceee0841f.tar.gz
postgresql-067f1e5fa85db901ba6b438c859420dceee0841f.zip
Fix 'pg_ctl restart' to preserve command-line arguments.
Diffstat (limited to 'src')
-rw-r--r--src/backend/postmaster/postmaster.c4
-rw-r--r--src/bin/pg_ctl/pg_ctl.c26
2 files changed, 18 insertions, 12 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 8d94408a48b..6f00e5ad341 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 84cb35125d5..310d1775d2b 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;