]> The Tcpdump Group git mirrors - tcpdump/commitdiff
Clean up the code a bit.
authorGuy Harris <[email protected]>
Sat, 15 Sep 2018 00:48:45 +0000 (17:48 -0700)
committerGuy Harris <[email protected]>
Sat, 15 Sep 2018 00:48:45 +0000 (17:48 -0700)
This eliminates a warning from MSVC, and makes the flow a little
clearer.

(Yes, it duplicates some code, but compilers have been pretty good at
merging common code sequences, so it might just turn it into the
equivalent of

if (optopt == (int)':')
goto label;
oli = strchr(ostr, optopt);
if (!oli) {
label:
/*
 * Unknown option character.
 */
if (!*place)
++optind;

...
}

although it does mean that the same C code exists in two places.)

missing/getopt_long.c

index 80857369804dbe21aa4c27ad50db68f743d8656e..3706240487bf3407703fc040a7e8de29968a4b7b 100644 (file)
@@ -495,16 +495,32 @@ start:
                }
        }
 
-       if ((optchar = (int)*place++) == (int)':' ||
-           (optchar == (int)'-' && *place != '\0') ||
-           (oli = strchr(options, optchar)) == NULL) {
+       optchar = (int)*place++;
+       /*
+        * If the user specified "-" and  '-' isn't listed in
+        * options, return -1 (non-option) as per POSIX.
+        */
+       if (optchar == (int)'-' && *place == '\0')
+               return (-1);
+       if (optchar == (int)':') {
+               if (!*place)
+                       ++optind;
+#ifdef GNU_COMPATIBLE
+               if (PRINT_ERROR)
+                       warnx(posixly_correct ? illoptchar : gnuoptchar,
+                             optchar);
+#else
+               if (PRINT_ERROR)
+                       warnx(illoptchar, optchar);
+#endif
+               optopt = optchar;
+               return (BADCH);
+       }
+       oli = strchr(options, optchar);
+       if (oli == NULL) {
                /*
-                * If the user specified "-" and  '-' isn't listed in
-                * options, return -1 (non-option) as per POSIX.
-                * Otherwise, it is an unknown option character (or ':').
+                * Unknown option character.
                 */
-               if (optchar == (int)'-' && *place == '\0')
-                       return (-1);
                if (!*place)
                        ++optind;
 #ifdef GNU_COMPATIBLE