]> granicus.if.org Git - postgresql/commitdiff
Fix 'pg_ctl restart' to preserve command-line arguments.
authorBruce Momjian <bruce@momjian.us>
Thu, 26 Jun 2008 02:47:19 +0000 (02:47 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 26 Jun 2008 02:47:19 +0000 (02:47 +0000)
src/backend/postmaster/postmaster.c
src/bin/pg_ctl/pg_ctl.c

index 8d94408a48b1503a33a8799f026f1c61454d3898..6f00e5ad341785a9e23e145c7432a93050db9bea 100644 (file)
@@ -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))
index 84cb35125d5f84ddc71521ae1fd9d03de2ae0734..310d1775d2b154fe18e99267e3617c0ad6515b0e 100644 (file)
@@ -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;