Applied.

---------------------------------------------------------------------------

On Wed, Oct 10, 2012 at 07:54:15PM -0400, Bruce Momjian wrote:
> On Mon, Oct  8, 2012 at 09:03:37PM -0400, Bruce Momjian wrote:
> > On Mon, Oct  8, 2012 at 04:33:29PM -0400, Tom Lane wrote:
> > > Bruce Momjian <[email protected]> writes:
> > > > A while ago I noticed that in some places we strdup/pg_strdup() optarg
> > > > strings from getopt(), and in some places we don't.
> > > 
> > > > If we needed the strdup(), the missing cases should generate errors.  If
> > > > we don't need them, the strdup() is unnecessary, and research confirms
> > > > they are unnecessary.  Should we remove the extra strdup/pg_strdup()
> > > > calls, for consistency.
> > > 
> > > What research?  Given the number of different ways argv[] is handled
> > > on different platforms (cf ps_status.c), I am very unwilling to trust
> > > that it's safe to hang onto an argv string for long without strdup'ing
> > > it.
> > > 
> > > > I think we might have had old platforms that required it, but none are
> > > > still supported today.
> > > 
> > > And what's your grounds for stating that?  All the alternatives in
> > > ps_status.c are still live code AFAICS.
> > > 
> > > My feeling is it's more likely to be a good idea to be adding strdup's
> > > than removing them.
> > 
> > Well, what we have now is either wrong or over-kill --- I don't know for
> > sure which.
> 
> OK, I have developed the attached patch to add strdup/pg_strdup() calls
> to all saving of getopt optarg arguments.
> 
> Also, do we want to centralize the definition of pg_strdup() in /port,
> or leave each module to define it on its own?   I see pg_strdup() defined
> in these modules:
> 
>       /pgtop/contrib/oid2name
>       /pgtop/contrib/pgbench
>       /pgtop/contrib/pg_upgrade
>       /pgtop/src/bin/initdb
>       /pgtop/src/bin/pg_basebackup
>       /pgtop/src/bin/pg_ctl
>       /pgtop/src/bin/pg_dump
>       /pgtop/src/bin/psql
>       /pgtop/src/bin/scripts
> 
> -- 
>   Bruce Momjian  <[email protected]>        http://momjian.us
>   EnterpriseDB                             http://enterprisedb.com
> 
>   + It's impossible for everything to be true. +

> diff --git a/contrib/pg_archivecleanup/pg_archivecleanup.c 
> b/contrib/pg_archivecleanup/pg_archivecleanup.c
> new file mode 100644
> index 8f77998..e97a11c
> *** a/contrib/pg_archivecleanup/pg_archivecleanup.c
> --- b/contrib/pg_archivecleanup/pg_archivecleanup.c
> *************** main(int argc, char **argv)
> *** 299,305 ****
>                               dryrun = true;
>                               break;
>                       case 'x':
> !                             additional_ext = optarg;                /* 
> Extension to remove from
>                                                                               
>                  * xlogfile names */
>                               break;
>                       default:
> --- 299,305 ----
>                               dryrun = true;
>                               break;
>                       case 'x':
> !                             additional_ext = strdup(optarg);                
> /* Extension to remove from
>                                                                               
>                  * xlogfile names */
>                               break;
>                       default:
> diff --git a/contrib/pg_standby/pg_standby.c b/contrib/pg_standby/pg_standby.c
> new file mode 100644
> index 84941ed..659bd50
> *** a/contrib/pg_standby/pg_standby.c
> --- b/contrib/pg_standby/pg_standby.c
> *************** main(int argc, char **argv)
> *** 643,649 ****
>                               }
>                               break;
>                       case 't':                       /* Trigger file */
> !                             triggerPath = optarg;
>                               break;
>                       case 'w':                       /* Max wait time */
>                               maxwaittime = atoi(optarg);
> --- 643,649 ----
>                               }
>                               break;
>                       case 't':                       /* Trigger file */
> !                             triggerPath = strdup(optarg);
>                               break;
>                       case 'w':                       /* Max wait time */
>                               maxwaittime = atoi(optarg);
> diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c
> new file mode 100644
> index c399d59..5d48aee
> *** a/contrib/pgbench/pgbench.c
> --- b/contrib/pgbench/pgbench.c
> *************** main(int argc, char **argv)
> *** 1995,2001 ****
>                               is_init_mode++;
>                               break;
>                       case 'h':
> !                             pghost = optarg;
>                               break;
>                       case 'n':
>                               is_no_vacuum++;
> --- 1995,2001 ----
>                               is_init_mode++;
>                               break;
>                       case 'h':
> !                             pghost = pg_strdup(optarg);
>                               break;
>                       case 'n':
>                               is_no_vacuum++;
> *************** main(int argc, char **argv)
> *** 2004,2010 ****
>                               do_vacuum_accounts++;
>                               break;
>                       case 'p':
> !                             pgport = optarg;
>                               break;
>                       case 'd':
>                               debug++;
> --- 2004,2010 ----
>                               do_vacuum_accounts++;
>                               break;
>                       case 'p':
> !                             pgport = pg_strdup(optarg);
>                               break;
>                       case 'd':
>                               debug++;
> *************** main(int argc, char **argv)
> *** 2090,2103 ****
>                               }
>                               break;
>                       case 'U':
> !                             login = optarg;
>                               break;
>                       case 'l':
>                               use_log = true;
>                               break;
>                       case 'f':
>                               ttype = 3;
> !                             filename = optarg;
>                               if (process_file(filename) == false || 
> *sql_files[num_files - 1] == NULL)
>                                       exit(1);
>                               break;
> --- 2090,2103 ----
>                               }
>                               break;
>                       case 'U':
> !                             login = pg_strdup(optarg);
>                               break;
>                       case 'l':
>                               use_log = true;
>                               break;
>                       case 'f':
>                               ttype = 3;
> !                             filename = pg_strdup(optarg);
>                               if (process_file(filename) == false || 
> *sql_files[num_files - 1] == NULL)
>                                       exit(1);
>                               break;
> *************** main(int argc, char **argv)
> *** 2143,2152 ****
>                               /* This covers long options which take no 
> argument. */
>                               break;
>                       case 2:                         /* tablespace */
> !                             tablespace = optarg;
>                               break;
>                       case 3:                         /* index-tablespace */
> !                             index_tablespace = optarg;
>                               break;
>                       case 4:
>                               sample_rate = atof(optarg);
> --- 2143,2152 ----
>                               /* This covers long options which take no 
> argument. */
>                               break;
>                       case 2:                         /* tablespace */
> !                             tablespace = pg_strdup(optarg);
>                               break;
>                       case 3:                         /* index-tablespace */
> !                             index_tablespace = pg_strdup(optarg);
>                               break;
>                       case 4:
>                               sample_rate = atof(optarg);
> diff --git a/src/backend/bootstrap/bootstrap.c 
> b/src/backend/bootstrap/bootstrap.c
> new file mode 100644
> index 34ddebb..11086e2
> *** a/src/backend/bootstrap/bootstrap.c
> --- b/src/backend/bootstrap/bootstrap.c
> *************** AuxiliaryProcessMain(int argc, char *arg
> *** 241,247 ****
>                               SetConfigOption("shared_buffers", optarg, 
> PGC_POSTMASTER, PGC_S_ARGV);
>                               break;
>                       case 'D':
> !                             userDoption = optarg;
>                               break;
>                       case 'd':
>                               {
> --- 241,247 ----
>                               SetConfigOption("shared_buffers", optarg, 
> PGC_POSTMASTER, PGC_S_ARGV);
>                               break;
>                       case 'D':
> !                             userDoption = strdup(optarg);
>                               break;
>                       case 'd':
>                               {
> diff --git a/src/backend/postmaster/postmaster.c 
> b/src/backend/postmaster/postmaster.c
> new file mode 100644
> index e73caa8..dfe4049
> *** a/src/backend/postmaster/postmaster.c
> --- b/src/backend/postmaster/postmaster.c
> *************** PostmasterMain(int argc, char *argv[])
> *** 570,580 ****
>                               break;
>   
>                       case 'C':
> !                             output_config_variable = optarg;
>                               break;
>   
>                       case 'D':
> !                             userDoption = optarg;
>                               break;
>   
>                       case 'd':
> --- 570,580 ----
>                               break;
>   
>                       case 'C':
> !                             output_config_variable = strdup(optarg);
>                               break;
>   
>                       case 'D':
> !                             userDoption = strdup(optarg);
>                               break;
>   
>                       case 'd':
> diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
> new file mode 100644
> index 9920d96..dd2019a
> *** a/src/bin/pg_dump/pg_dump.c
> --- b/src/bin/pg_dump/pg_dump.c
> *************** main(int argc, char **argv)
> *** 409,427 ****
>                               break;
>   
>                       case 'E':                       /* Dump encoding */
> !                             dumpencoding = optarg;
>                               break;
>   
>                       case 'f':
> !                             filename = optarg;
>                               break;
>   
>                       case 'F':
> !                             format = optarg;
>                               break;
>   
>                       case 'h':                       /* server host */
> !                             pghost = optarg;
>                               break;
>   
>                       case 'i':
> --- 409,427 ----
>                               break;
>   
>                       case 'E':                       /* Dump encoding */
> !                             dumpencoding = pg_strdup(optarg);
>                               break;
>   
>                       case 'f':
> !                             filename = pg_strdup(optarg);
>                               break;
>   
>                       case 'F':
> !                             format = pg_strdup(optarg);
>                               break;
>   
>                       case 'h':                       /* server host */
> !                             pghost = pg_strdup(optarg);
>                               break;
>   
>                       case 'i':
> *************** main(int argc, char **argv)
> *** 446,452 ****
>                               break;
>   
>                       case 'p':                       /* server port */
> !                             pgport = optarg;
>                               break;
>   
>                       case 'R':
> --- 446,452 ----
>                               break;
>   
>                       case 'p':                       /* server port */
> !                             pgport = pg_strdup(optarg);
>                               break;
>   
>                       case 'R':
> *************** main(int argc, char **argv)
> *** 471,477 ****
>                               break;
>   
>                       case 'U':
> !                             username = optarg;
>                               break;
>   
>                       case 'v':                       /* verbose */
> --- 471,477 ----
>                               break;
>   
>                       case 'U':
> !                             username = pg_strdup(optarg);
>                               break;
>   
>                       case 'v':                       /* verbose */
> *************** main(int argc, char **argv)
> *** 499,509 ****
>                               break;
>   
>                       case 2:                         /* lock-wait-timeout */
> !                             lockWaitTimeout = optarg;
>                               break;
>   
>                       case 3:                         /* SET ROLE */
> !                             use_role = optarg;
>                               break;
>   
>                       case 4:                         /* exclude table(s) 
> data */
> --- 499,509 ----
>                               break;
>   
>                       case 2:                         /* lock-wait-timeout */
> !                             lockWaitTimeout = pg_strdup(optarg);
>                               break;
>   
>                       case 3:                         /* SET ROLE */
> !                             use_role = pg_strdup(optarg);
>                               break;
>   
>                       case 4:                         /* exclude table(s) 
> data */
> diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
> new file mode 100644
> index 10ce222..ca95bad
> *** a/src/bin/pg_dump/pg_dumpall.c
> --- b/src/bin/pg_dump/pg_dumpall.c
> *************** main(int argc, char *argv[])
> *** 200,206 ****
>                               break;
>   
>                       case 'f':
> !                             filename = optarg;
>                               appendPQExpBuffer(pgdumpopts, " -f ");
>                               doShellQuoting(pgdumpopts, filename);
>                               break;
> --- 200,206 ----
>                               break;
>   
>                       case 'f':
> !                             filename = pg_strdup(optarg);
>                               appendPQExpBuffer(pgdumpopts, " -f ");
>                               doShellQuoting(pgdumpopts, filename);
>                               break;
> *************** main(int argc, char *argv[])
> *** 210,216 ****
>                               break;
>   
>                       case 'h':
> !                             pghost = optarg;
>                               appendPQExpBuffer(pgdumpopts, " -h ");
>                               doShellQuoting(pgdumpopts, pghost);
>                               break;
> --- 210,216 ----
>                               break;
>   
>                       case 'h':
> !                             pghost = pg_strdup(optarg);
>                               appendPQExpBuffer(pgdumpopts, " -h ");
>                               doShellQuoting(pgdumpopts, pghost);
>                               break;
> *************** main(int argc, char *argv[])
> *** 220,226 ****
>                               break;
>   
>                       case 'l':
> !                             pgdb = optarg;
>                               break;
>   
>                       case 'o':
> --- 220,226 ----
>                               break;
>   
>                       case 'l':
> !                             pgdb = pg_strdup(optarg);
>                               break;
>   
>                       case 'o':
> *************** main(int argc, char *argv[])
> *** 232,238 ****
>                               break;
>   
>                       case 'p':
> !                             pgport = optarg;
>                               appendPQExpBuffer(pgdumpopts, " -p ");
>                               doShellQuoting(pgdumpopts, pgport);
>                               break;
> --- 232,238 ----
>                               break;
>   
>                       case 'p':
> !                             pgport = pg_strdup(optarg);
>                               appendPQExpBuffer(pgdumpopts, " -p ");
>                               doShellQuoting(pgdumpopts, pgport);
>                               break;
> *************** main(int argc, char *argv[])
> *** 255,261 ****
>                               break;
>   
>                       case 'U':
> !                             pguser = optarg;
>                               appendPQExpBuffer(pgdumpopts, " -U ");
>                               doShellQuoting(pgdumpopts, pguser);
>                               break;
> --- 255,261 ----
>                               break;
>   
>                       case 'U':
> !                             pguser = pg_strdup(optarg);
>                               appendPQExpBuffer(pgdumpopts, " -U ");
>                               doShellQuoting(pgdumpopts, pguser);
>                               break;
> *************** main(int argc, char *argv[])
> *** 289,295 ****
>                               break;
>   
>                       case 3:
> !                             use_role = optarg;
>                               appendPQExpBuffer(pgdumpopts, " --role ");
>                               doShellQuoting(pgdumpopts, use_role);
>                               break;
> --- 289,295 ----
>                               break;
>   
>                       case 3:
> !                             use_role = pg_strdup(optarg);
>                               appendPQExpBuffer(pgdumpopts, " --role ");
>                               doShellQuoting(pgdumpopts, use_role);
>                               break;
> diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c
> new file mode 100644
> index f6c835b..49d799b
> *** a/src/bin/pg_dump/pg_restore.c
> --- b/src/bin/pg_dump/pg_restore.c
> *************** main(int argc, char **argv)
> *** 238,244 ****
>                               break;
>   
>                       case 'U':
> !                             opts->username = optarg;
>                               break;
>   
>                       case 'v':                       /* verbose */
> --- 238,244 ----
>                               break;
>   
>                       case 'U':
> !                             opts->username = pg_strdup(optarg);
>                               break;
>   
>                       case 'v':                       /* verbose */
> *************** main(int argc, char **argv)
> *** 270,276 ****
>                               break;
>   
>                       case 2:                         /* SET ROLE */
> !                             opts->use_role = optarg;
>                               break;
>   
>                       case 3:                         /* section */
> --- 270,276 ----
>                               break;
>   
>                       case 2:                         /* SET ROLE */
> !                             opts->use_role = pg_strdup(optarg);
>                               break;
>   
>                       case 3:                         /* section */
> diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c
> new file mode 100644
> index 3fb12c9..1fcc47f
> *** a/src/bin/psql/startup.c
> --- b/src/bin/psql/startup.c
> *************** parse_psql_options(int argc, char *argv[
> *** 411,417 ****
>                               pset.popt.topt.format = PRINT_UNALIGNED;
>                               break;
>                       case 'c':
> !                             options->action_string = optarg;
>                               if (optarg[0] == '\\')
>                               {
>                                       options->action = ACT_SINGLE_SLASH;
> --- 411,417 ----
>                               pset.popt.topt.format = PRINT_UNALIGNED;
>                               break;
>                       case 'c':
> !                             options->action_string = pg_strdup(optarg);
>                               if (optarg[0] == '\\')
>                               {
>                                       options->action = ACT_SINGLE_SLASH;
> *************** parse_psql_options(int argc, char *argv[
> *** 421,427 ****
>                                       options->action = ACT_SINGLE_QUERY;
>                               break;
>                       case 'd':
> !                             options->dbname = optarg;
>                               break;
>                       case 'e':
>                               SetVariable(pset.vars, "ECHO", "queries");
> --- 421,427 ----
>                                       options->action = ACT_SINGLE_QUERY;
>                               break;
>                       case 'd':
> !                             options->dbname = pg_strdup(optarg);
>                               break;
>                       case 'e':
>                               SetVariable(pset.vars, "ECHO", "queries");
> *************** parse_psql_options(int argc, char *argv[
> *** 431,444 ****
>                               break;
>                       case 'f':
>                               options->action = ACT_FILE;
> !                             options->action_string = optarg;
>                               break;
>                       case 'F':
>                               pset.popt.topt.fieldSep.separator = 
> pg_strdup(optarg);
>                               pset.popt.topt.fieldSep.separator_zero = false;
>                               break;
>                       case 'h':
> !                             options->host = optarg;
>                               break;
>                       case 'H':
>                               pset.popt.topt.format = PRINT_HTML;
> --- 431,444 ----
>                               break;
>                       case 'f':
>                               options->action = ACT_FILE;
> !                             options->action_string = pg_strdup(optarg);
>                               break;
>                       case 'F':
>                               pset.popt.topt.fieldSep.separator = 
> pg_strdup(optarg);
>                               pset.popt.topt.fieldSep.separator_zero = false;
>                               break;
>                       case 'h':
> !                             options->host = pg_strdup(optarg);
>                               break;
>                       case 'H':
>                               pset.popt.topt.format = PRINT_HTML;
> *************** parse_psql_options(int argc, char *argv[
> *** 447,453 ****
>                               options->action = ACT_LIST_DB;
>                               break;
>                       case 'L':
> !                             options->logfilename = optarg;
>                               break;
>                       case 'n':
>                               options->no_readline = true;
> --- 447,453 ----
>                               options->action = ACT_LIST_DB;
>                               break;
>                       case 'L':
> !                             options->logfilename = pg_strdup(optarg);
>                               break;
>                       case 'n':
>                               options->no_readline = true;
> *************** parse_psql_options(int argc, char *argv[
> *** 456,462 ****
>                               setQFout(optarg);
>                               break;
>                       case 'p':
> !                             options->port = optarg;
>                               break;
>                       case 'P':
>                               {
> --- 456,462 ----
>                               setQFout(optarg);
>                               break;
>                       case 'p':
> !                             options->port = pg_strdup(optarg);
>                               break;
>                       case 'P':
>                               {
> *************** parse_psql_options(int argc, char *argv[
> *** 503,509 ****
>                               pset.popt.topt.tableAttr = pg_strdup(optarg);
>                               break;
>                       case 'U':
> !                             options->username = optarg;
>                               break;
>                       case 'v':
>                               {
> --- 503,509 ----
>                               pset.popt.topt.tableAttr = pg_strdup(optarg);
>                               break;
>                       case 'U':
> !                             options->username = pg_strdup(optarg);
>                               break;
>                       case 'v':
>                               {
> diff --git a/src/bin/scripts/clusterdb.c b/src/bin/scripts/clusterdb.c
> new file mode 100644
> index b8ac675..261b438
> *** a/src/bin/scripts/clusterdb.c
> --- b/src/bin/scripts/clusterdb.c
> *************** main(int argc, char *argv[])
> *** 71,83 ****
>               switch (c)
>               {
>                       case 'h':
> !                             host = optarg;
>                               break;
>                       case 'p':
> !                             port = optarg;
>                               break;
>                       case 'U':
> !                             username = optarg;
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> --- 71,83 ----
>               switch (c)
>               {
>                       case 'h':
> !                             host = pg_strdup(optarg);
>                               break;
>                       case 'p':
> !                             port = pg_strdup(optarg);
>                               break;
>                       case 'U':
> !                             username = pg_strdup(optarg);
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> *************** main(int argc, char *argv[])
> *** 92,110 ****
>                               quiet = true;
>                               break;
>                       case 'd':
> !                             dbname = optarg;
>                               break;
>                       case 'a':
>                               alldb = true;
>                               break;
>                       case 't':
> !                             table = optarg;
>                               break;
>                       case 'v':
>                               verbose = true;
>                               break;
>                       case 2:
> !                             maintenance_db = optarg;
>                               break;
>                       default:
>                               fprintf(stderr, _("Try \"%s --help\" for more 
> information.\n"), progname);
> --- 92,110 ----
>                               quiet = true;
>                               break;
>                       case 'd':
> !                             dbname = pg_strdup(optarg);
>                               break;
>                       case 'a':
>                               alldb = true;
>                               break;
>                       case 't':
> !                             table = pg_strdup(optarg);
>                               break;
>                       case 'v':
>                               verbose = true;
>                               break;
>                       case 2:
> !                             maintenance_db = pg_strdup(optarg);
>                               break;
>                       default:
>                               fprintf(stderr, _("Try \"%s --help\" for more 
> information.\n"), progname);
> diff --git a/src/bin/scripts/createdb.c b/src/bin/scripts/createdb.c
> new file mode 100644
> index 91b1a24..4df70cb
> *** a/src/bin/scripts/createdb.c
> --- b/src/bin/scripts/createdb.c
> *************** main(int argc, char *argv[])
> *** 74,86 ****
>               switch (c)
>               {
>                       case 'h':
> !                             host = optarg;
>                               break;
>                       case 'p':
> !                             port = optarg;
>                               break;
>                       case 'U':
> !                             username = optarg;
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> --- 74,86 ----
>               switch (c)
>               {
>                       case 'h':
> !                             host = pg_strdup(optarg);
>                               break;
>                       case 'p':
> !                             port = pg_strdup(optarg);
>                               break;
>                       case 'U':
> !                             username = pg_strdup(optarg);
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> *************** main(int argc, char *argv[])
> *** 92,119 ****
>                               echo = true;
>                               break;
>                       case 'O':
> !                             owner = optarg;
>                               break;
>                       case 'D':
> !                             tablespace = optarg;
>                               break;
>                       case 'T':
> !                             template = optarg;
>                               break;
>                       case 'E':
> !                             encoding = optarg;
>                               break;
>                       case 1:
> !                             lc_collate = optarg;
>                               break;
>                       case 2:
> !                             lc_ctype = optarg;
>                               break;
>                       case 'l':
> !                             locale = optarg;
>                               break;
>                       case 3:
> !                             maintenance_db = optarg;
>                               break;
>                       default:
>                               fprintf(stderr, _("Try \"%s --help\" for more 
> information.\n"), progname);
> --- 92,119 ----
>                               echo = true;
>                               break;
>                       case 'O':
> !                             owner = pg_strdup(optarg);
>                               break;
>                       case 'D':
> !                             tablespace = pg_strdup(optarg);
>                               break;
>                       case 'T':
> !                             template = pg_strdup(optarg);
>                               break;
>                       case 'E':
> !                             encoding = pg_strdup(optarg);
>                               break;
>                       case 1:
> !                             lc_collate = pg_strdup(optarg);
>                               break;
>                       case 2:
> !                             lc_ctype = pg_strdup(optarg);
>                               break;
>                       case 'l':
> !                             locale = pg_strdup(optarg);
>                               break;
>                       case 3:
> !                             maintenance_db = pg_strdup(optarg);
>                               break;
>                       default:
>                               fprintf(stderr, _("Try \"%s --help\" for more 
> information.\n"), progname);
> diff --git a/src/bin/scripts/createlang.c b/src/bin/scripts/createlang.c
> new file mode 100644
> index 60066af..b85cf04
> *** a/src/bin/scripts/createlang.c
> --- b/src/bin/scripts/createlang.c
> *************** main(int argc, char *argv[])
> *** 65,77 ****
>                               listlangs = true;
>                               break;
>                       case 'h':
> !                             host = optarg;
>                               break;
>                       case 'p':
> !                             port = optarg;
>                               break;
>                       case 'U':
> !                             username = optarg;
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> --- 65,77 ----
>                               listlangs = true;
>                               break;
>                       case 'h':
> !                             host = pg_strdup(optarg);
>                               break;
>                       case 'p':
> !                             port = pg_strdup(optarg);
>                               break;
>                       case 'U':
> !                             username = pg_strdup(optarg);
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> *************** main(int argc, char *argv[])
> *** 80,86 ****
>                               prompt_password = TRI_YES;
>                               break;
>                       case 'd':
> !                             dbname = optarg;
>                               break;
>                       case 'e':
>                               echo = true;
> --- 80,86 ----
>                               prompt_password = TRI_YES;
>                               break;
>                       case 'd':
> !                             dbname = pg_strdup(optarg);
>                               break;
>                       case 'e':
>                               echo = true;
> diff --git a/src/bin/scripts/createuser.c b/src/bin/scripts/createuser.c
> new file mode 100644
> index db3b5d0..d35121b
> *** a/src/bin/scripts/createuser.c
> --- b/src/bin/scripts/createuser.c
> *************** main(int argc, char *argv[])
> *** 89,101 ****
>               switch (c)
>               {
>                       case 'h':
> !                             host = optarg;
>                               break;
>                       case 'p':
> !                             port = optarg;
>                               break;
>                       case 'U':
> !                             username = optarg;
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> --- 89,101 ----
>               switch (c)
>               {
>                       case 'h':
> !                             host = pg_strdup(optarg);
>                               break;
>                       case 'p':
> !                             port = pg_strdup(optarg);
>                               break;
>                       case 'U':
> !                             username = pg_strdup(optarg);
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> *************** main(int argc, char *argv[])
> *** 139,145 ****
>                               login = TRI_NO;
>                               break;
>                       case 'c':
> !                             conn_limit = optarg;
>                               break;
>                       case 'P':
>                               pwprompt = true;
> --- 139,145 ----
>                               login = TRI_NO;
>                               break;
>                       case 'c':
> !                             conn_limit = pg_strdup(optarg);
>                               break;
>                       case 'P':
>                               pwprompt = true;
> diff --git a/src/bin/scripts/dropdb.c b/src/bin/scripts/dropdb.c
> new file mode 100644
> index 583655d..5f978cc
> *** a/src/bin/scripts/dropdb.c
> --- b/src/bin/scripts/dropdb.c
> *************** main(int argc, char *argv[])
> *** 64,76 ****
>               switch (c)
>               {
>                       case 'h':
> !                             host = optarg;
>                               break;
>                       case 'p':
> !                             port = optarg;
>                               break;
>                       case 'U':
> !                             username = optarg;
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> --- 64,76 ----
>               switch (c)
>               {
>                       case 'h':
> !                             host = pg_strdup(optarg);
>                               break;
>                       case 'p':
> !                             port = pg_strdup(optarg);
>                               break;
>                       case 'U':
> !                             username = pg_strdup(optarg);
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> *************** main(int argc, char *argv[])
> *** 88,94 ****
>                               /* this covers the long options */
>                               break;
>                       case 2:
> !                             maintenance_db = optarg;
>                               break;
>                       default:
>                               fprintf(stderr, _("Try \"%s --help\" for more 
> information.\n"), progname);
> --- 88,94 ----
>                               /* this covers the long options */
>                               break;
>                       case 2:
> !                             maintenance_db = pg_strdup(optarg);
>                               break;
>                       default:
>                               fprintf(stderr, _("Try \"%s --help\" for more 
> information.\n"), progname);
> diff --git a/src/bin/scripts/droplang.c b/src/bin/scripts/droplang.c
> new file mode 100644
> index 4772dc5..b9f42bb
> *** a/src/bin/scripts/droplang.c
> --- b/src/bin/scripts/droplang.c
> *************** main(int argc, char *argv[])
> *** 64,76 ****
>                               listlangs = true;
>                               break;
>                       case 'h':
> !                             host = optarg;
>                               break;
>                       case 'p':
> !                             port = optarg;
>                               break;
>                       case 'U':
> !                             username = optarg;
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> --- 64,76 ----
>                               listlangs = true;
>                               break;
>                       case 'h':
> !                             host = pg_strdup(optarg);
>                               break;
>                       case 'p':
> !                             port = pg_strdup(optarg);
>                               break;
>                       case 'U':
> !                             username = pg_strdup(optarg);
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> *************** main(int argc, char *argv[])
> *** 79,85 ****
>                               prompt_password = TRI_YES;
>                               break;
>                       case 'd':
> !                             dbname = optarg;
>                               break;
>                       case 'e':
>                               echo = true;
> --- 79,85 ----
>                               prompt_password = TRI_YES;
>                               break;
>                       case 'd':
> !                             dbname = pg_strdup(optarg);
>                               break;
>                       case 'e':
>                               echo = true;
> diff --git a/src/bin/scripts/dropuser.c b/src/bin/scripts/dropuser.c
> new file mode 100644
> index d0bf6ff..7c10101
> *** a/src/bin/scripts/dropuser.c
> --- b/src/bin/scripts/dropuser.c
> *************** main(int argc, char *argv[])
> *** 62,74 ****
>               switch (c)
>               {
>                       case 'h':
> !                             host = optarg;
>                               break;
>                       case 'p':
> !                             port = optarg;
>                               break;
>                       case 'U':
> !                             username = optarg;
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> --- 62,74 ----
>               switch (c)
>               {
>                       case 'h':
> !                             host = pg_strdup(optarg);
>                               break;
>                       case 'p':
> !                             port = pg_strdup(optarg);
>                               break;
>                       case 'U':
> !                             username = pg_strdup(optarg);
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> diff --git a/src/bin/scripts/reindexdb.c b/src/bin/scripts/reindexdb.c
> new file mode 100644
> index d1e27bd..f61dada
> *** a/src/bin/scripts/reindexdb.c
> --- b/src/bin/scripts/reindexdb.c
> *************** main(int argc, char *argv[])
> *** 78,90 ****
>               switch (c)
>               {
>                       case 'h':
> !                             host = optarg;
>                               break;
>                       case 'p':
> !                             port = optarg;
>                               break;
>                       case 'U':
> !                             username = optarg;
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> --- 78,90 ----
>               switch (c)
>               {
>                       case 'h':
> !                             host = pg_strdup(optarg);
>                               break;
>                       case 'p':
> !                             port = pg_strdup(optarg);
>                               break;
>                       case 'U':
> !                             username = pg_strdup(optarg);
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> *************** main(int argc, char *argv[])
> *** 99,105 ****
>                               quiet = true;
>                               break;
>                       case 'd':
> !                             dbname = optarg;
>                               break;
>                       case 'a':
>                               alldb = true;
> --- 99,105 ----
>                               quiet = true;
>                               break;
>                       case 'd':
> !                             dbname = pg_strdup(optarg);
>                               break;
>                       case 'a':
>                               alldb = true;
> *************** main(int argc, char *argv[])
> *** 108,120 ****
>                               syscatalog = true;
>                               break;
>                       case 't':
> !                             table = optarg;
>                               break;
>                       case 'i':
> !                             index = optarg;
>                               break;
>                       case 2:
> !                             maintenance_db = optarg;
>                               break;
>                       default:
>                               fprintf(stderr, _("Try \"%s --help\" for more 
> information.\n"), progname);
> --- 108,120 ----
>                               syscatalog = true;
>                               break;
>                       case 't':
> !                             table = pg_strdup(optarg);
>                               break;
>                       case 'i':
> !                             index = pg_strdup(optarg);
>                               break;
>                       case 2:
> !                             maintenance_db = pg_strdup(optarg);
>                               break;
>                       default:
>                               fprintf(stderr, _("Try \"%s --help\" for more 
> information.\n"), progname);
> diff --git a/src/bin/scripts/vacuumdb.c b/src/bin/scripts/vacuumdb.c
> new file mode 100644
> index 0ac6ab4..eb28ad4
> *** a/src/bin/scripts/vacuumdb.c
> --- b/src/bin/scripts/vacuumdb.c
> *************** main(int argc, char *argv[])
> *** 82,94 ****
>               switch (c)
>               {
>                       case 'h':
> !                             host = optarg;
>                               break;
>                       case 'p':
> !                             port = optarg;
>                               break;
>                       case 'U':
> !                             username = optarg;
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> --- 82,94 ----
>               switch (c)
>               {
>                       case 'h':
> !                             host = pg_strdup(optarg);
>                               break;
>                       case 'p':
> !                             port = pg_strdup(optarg);
>                               break;
>                       case 'U':
> !                             username = pg_strdup(optarg);
>                               break;
>                       case 'w':
>                               prompt_password = TRI_NO;
> *************** main(int argc, char *argv[])
> *** 103,109 ****
>                               quiet = true;
>                               break;
>                       case 'd':
> !                             dbname = optarg;
>                               break;
>                       case 'z':
>                               and_analyze = true;
> --- 103,109 ----
>                               quiet = true;
>                               break;
>                       case 'd':
> !                             dbname = pg_strdup(optarg);
>                               break;
>                       case 'z':
>                               and_analyze = true;
> *************** main(int argc, char *argv[])
> *** 118,124 ****
>                               alldb = true;
>                               break;
>                       case 't':
> !                             table = optarg;
>                               break;
>                       case 'f':
>                               full = true;
> --- 118,124 ----
>                               alldb = true;
>                               break;
>                       case 't':
> !                             table = pg_strdup(optarg);
>                               break;
>                       case 'f':
>                               full = true;
> *************** main(int argc, char *argv[])
> *** 127,133 ****
>                               verbose = true;
>                               break;
>                       case 2:
> !                             maintenance_db = optarg;
>                               break;
>                       default:
>                               fprintf(stderr, _("Try \"%s --help\" for more 
> information.\n"), progname);
> --- 127,133 ----
>                               verbose = true;
>                               break;
>                       case 2:
> !                             maintenance_db = pg_strdup(optarg);
>                               break;
>                       default:
>                               fprintf(stderr, _("Try \"%s --help\" for more 
> information.\n"), progname);
> diff --git a/src/interfaces/ecpg/preproc/ecpg.c 
> b/src/interfaces/ecpg/preproc/ecpg.c
> new file mode 100644
> index 7e7bae3..1b775a1
> *** a/src/interfaces/ecpg/preproc/ecpg.c
> --- b/src/interfaces/ecpg/preproc/ecpg.c
> *************** main(int argc, char *const argv[])
> *** 171,177 ****
>                               regression_mode = true;
>                               break;
>                       case 'o':
> !                             output_filename = optarg;
>                               if (strcmp(output_filename, "-") == 0)
>                                       yyout = stdout;
>                               else
> --- 171,177 ----
>                               regression_mode = true;
>                               break;
>                       case 'o':
> !                             output_filename = strdup(optarg);
>                               if (strcmp(output_filename, "-") == 0)
>                                       yyout = stdout;
>                               else
> diff --git a/src/timezone/zic.c b/src/timezone/zic.c
> new file mode 100644
> index 8a95d6a..0aa90eb
> *** a/src/timezone/zic.c
> --- b/src/timezone/zic.c
> *************** main(int argc, char *argv[])
> *** 505,511 ****
>                               usage(stderr, EXIT_FAILURE);
>                       case 'd':
>                               if (directory == NULL)
> !                                     directory = optarg;
>                               else
>                               {
>                                       (void) fprintf(stderr,
> --- 505,511 ----
>                               usage(stderr, EXIT_FAILURE);
>                       case 'd':
>                               if (directory == NULL)
> !                                     directory = strdup(optarg);
>                               else
>                               {
>                                       (void) fprintf(stderr,
> *************** main(int argc, char *argv[])
> *** 516,522 ****
>                               break;
>                       case 'l':
>                               if (lcltime == NULL)
> !                                     lcltime = optarg;
>                               else
>                               {
>                                       (void) fprintf(stderr,
> --- 516,522 ----
>                               break;
>                       case 'l':
>                               if (lcltime == NULL)
> !                                     lcltime = strdup(optarg);
>                               else
>                               {
>                                       (void) fprintf(stderr,
> *************** main(int argc, char *argv[])
> *** 527,533 ****
>                               break;
>                       case 'p':
>                               if (psxrules == NULL)
> !                                     psxrules = optarg;
>                               else
>                               {
>                                       (void) fprintf(stderr,
> --- 527,533 ----
>                               break;
>                       case 'p':
>                               if (psxrules == NULL)
> !                                     psxrules = strdup(optarg);
>                               else
>                               {
>                                       (void) fprintf(stderr,
> *************** main(int argc, char *argv[])
> *** 538,544 ****
>                               break;
>                       case 'y':
>                               if (yitcommand == NULL)
> !                                     yitcommand = optarg;
>                               else
>                               {
>                                       (void) fprintf(stderr,
> --- 538,544 ----
>                               break;
>                       case 'y':
>                               if (yitcommand == NULL)
> !                                     yitcommand = strdup(optarg);
>                               else
>                               {
>                                       (void) fprintf(stderr,
> *************** main(int argc, char *argv[])
> *** 549,555 ****
>                               break;
>                       case 'L':
>                               if (leapsec == NULL)
> !                                     leapsec = optarg;
>                               else
>                               {
>                                       (void) fprintf(stderr,
> --- 549,555 ----
>                               break;
>                       case 'L':
>                               if (leapsec == NULL)
> !                                     leapsec = strdup(optarg);
>                               else
>                               {
>                                       (void) fprintf(stderr,

> 
> -- 
> Sent via pgsql-hackers mailing list ([email protected])
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers


-- 
  Bruce Momjian  <[email protected]>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +


-- 
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to