From eb2cdf8a984616eecf2a7fac2ba76dccc71d454f Mon Sep 17 00:00:00 2001 From: Ian Barwick Date: Mon, 5 Dec 2016 14:34:33 +0900 Subject: [PATCH] repmgr: improve handling of command line parameter errors Previously providing a parameter which requires a value (e.g. -f/--config-file) would result in a misleading error like "Unknown option -f". Rather than suppress getopt's error messages, we'll rely on these to inform about missing required values or unknown options (as other PostgreSQL tools do), though we will still provide our own list of command line errors and warnings countered above and beyond getopt's sanity checks. --- HISTORY | 5 ++++- repmgr.c | 32 ++++++++------------------------ 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/HISTORY b/HISTORY index 2adeec47..95fbe930 100644 --- a/HISTORY +++ b/HISTORY @@ -1,5 +1,8 @@ -3.2.2 2016- +3.2.2 2016-12- repmgr: always log to STDERR even if log facility defined (Ian) + repmgr: add --log-to-file to log repmgr output to the defined + log facility (Ian) + repmgr: improve handling of command line parameter errors (Ian) 3.2.1 2016-10-24 repmgr: require a valid repmgr cluster name unless -F/--force diff --git a/repmgr.c b/repmgr.c index ca0498c3..30ce091d 100644 --- a/repmgr.c +++ b/repmgr.c @@ -333,9 +333,6 @@ main(int argc, char **argv) strncpy(runtime_options.dbname, runtime_options.username, MAXLEN); } - /* Prevent getopt_long() from printing an error message */ - opterr = 0; - while ((c = getopt_long(argc, argv, "?Vd:h:p:U:S:D:f:R:w:k:FWIvb:rcL:tm:C:l:", long_options, &optindex)) != -1) { @@ -347,17 +344,6 @@ main(int argc, char **argv) */ switch (c) { - case '?': - /* Actual help option given */ - if (strcmp(argv[optind - 1], "-?") == 0) - { - do_help(); - exit(SUCCESS); - } - /* unknown option reported by getopt */ - else - goto unknown_option; - break; case OPT_HELP: do_help(); exit(SUCCESS); @@ -567,16 +553,14 @@ main(int argc, char **argv) case OPT_IGNORE_EXTERNAL_CONFIG_FILES: item_list_append(&cli_warnings, _("--ignore-external-config-files is deprecated and has no effect; use --copy-external-config-file instead")); break; - - default: - unknown_option: - { - PQExpBufferData unknown_option; - initPQExpBuffer(&unknown_option); - appendPQExpBuffer(&unknown_option, _("Unknown option '%s'"), argv[optind - 1]); - - item_list_append(&cli_errors, unknown_option.data); - } + case '?': + /* Actual help option given */ + if (strcmp(argv[optind - 1], "-?") == 0) + { + do_help(); + exit(SUCCESS); + } + break; } }