Fix ecpg -? option on Windows, add -V alias for --version.
authorHeikki Linnakangas <[email protected]>
Sun, 18 Sep 2016 10:46:32 +0000 (13:46 +0300)
committerHeikki Linnakangas <[email protected]>
Sun, 18 Sep 2016 10:46:32 +0000 (13:46 +0300)
This makes the -? and -V options work consistently with other binaries.
--help and --version are now only recognized as the first option, i.e.
"ecpg --foobar --help" no longer prints the help, but that's consistent
with most of our other binaries, too.

Backpatch to all supported versions.

Haribabu Kommi

Discussion: <CAJrrPGfnRXvmCzxq6Dy=stAWebfNHxiL+Y_z7uqksZUCkW_waQ@mail.gmail.com>

src/interfaces/ecpg/preproc/ecpg.c

index 3ce9d04bcc641753f5c648627fc8eb790fc380f9..46bacb0e8eead0f92254d479d3adb850d1360f69 100644 (file)
@@ -54,7 +54,7 @@ help(const char *progname)
     "                 \"no_indicator\", \"prepare\", \"questionmarks\"\n"));
    printf(_("  --regression   run in regression testing mode\n"));
    printf(_("  -t             turn on autocommit of transactions\n"));
-   printf(_("  --version      output version information, then exit\n"));
+   printf(_("  -V, --version  output version information, then exit\n"));
    printf(_("  -?, --help     show this help, then exit\n"));
    printf(_("\nIf no output file is specified, the name is formed by adding .c to the\n"
             "input file name, after stripping off .pgc if present.\n"));
@@ -111,15 +111,11 @@ add_preprocessor_define(char *define)
    defines->next = pd;
 }
 
-#define ECPG_GETOPT_LONG_HELP          1
-#define ECPG_GETOPT_LONG_VERSION       2
-#define ECPG_GETOPT_LONG_REGRESSION        3
+#define ECPG_GETOPT_LONG_REGRESSION        1
 int
 main(int argc, char *const argv[])
 {
    static struct option ecpg_options[] = {
-       {"help", no_argument, NULL, ECPG_GETOPT_LONG_HELP},
-       {"version", no_argument, NULL, ECPG_GETOPT_LONG_VERSION},
        {"regression", no_argument, NULL, ECPG_GETOPT_LONG_REGRESSION},
        {NULL, 0, NULL, 0}
    };
@@ -144,32 +140,25 @@ main(int argc, char *const argv[])
        return (ILLEGAL_OPTION);
    }
 
+   if (argc > 1)
+   {
+       if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0)
+       {
+           help(progname);
+           exit(0);
+       }
+       if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0)
+       {
+           printf("ecpg %s\n", PG_VERSION);
+           exit(0);
+       }
+   }
+
    output_filename = NULL;
-   while ((c = getopt_long(argc, argv, "vcio:I:tD:dC:r:h?", ecpg_options, NULL)) != -1)
+   while ((c = getopt_long(argc, argv, "vcio:I:tD:dC:r:h", ecpg_options, NULL)) != -1)
    {
        switch (c)
        {
-           case ECPG_GETOPT_LONG_VERSION:
-               printf("ecpg %s\n", PG_VERSION);
-               exit(0);
-           case ECPG_GETOPT_LONG_HELP:
-               help(progname);
-               exit(0);
-
-               /*
-                * -? is an alternative spelling of --help. However it is also
-                * returned by getopt_long for unknown options. We can
-                * distinguish both cases by means of the optopt variable
-                * which is set to 0 if it was really -? and not an unknown
-                * option character.
-                */
-           case '?':
-               if (optopt == 0)
-               {
-                   help(progname);
-                   exit(0);
-               }
-               break;
            case ECPG_GETOPT_LONG_REGRESSION:
                regression_mode = true;
                break;