Several utilities have command line parsing that predates getopt. Several of
these are the old kmem grovellers, which allowed specifying the custom nlist,
etc.

I think this is kind of unusual and think that generally, the fewer
undocumented features the better. This is as likely to trap people who make
typos as anything.

Here's a sample diff for netstat. I kept the interval parsing, because I
suspect people use that. unifdef the compat code, since it's realistically not
going anywhere. But delete the old memf handling. Finally, check argc is sane,
so that "netstat 1 apple banana cat dog elephant" doesn't just run without
error.

More to come for assorted other programs with similar blocks if we like this.

Index: main.c
===================================================================
RCS file: /cvs/src/usr.bin/netstat/main.c,v
retrieving revision 1.106
diff -u -p -r1.106 main.c
--- main.c      12 Feb 2015 01:49:02 -0000      1.106
+++ main.c      1 Oct 2015 20:23:40 -0000
@@ -263,23 +263,18 @@ main(int argc, char *argv[])
        argv += optind;
        argc -= optind;
 
-#define        BACKWARD_COMPATIBILITY
-#ifdef BACKWARD_COMPATIBILITY
        if (*argv) {
                if (isdigit((unsigned char)**argv)) {
                        interval = strtonum(*argv, 1, INT_MAX, &errstr);
                        if (errstr)
                                errx(1, "interval is %s", errstr);
                        ++argv;
+                       --argc;
                        iflag = 1;
                }
-               if (*argv) {
-                       nlistf = *argv;
-                       if (*++argv)
-                               memf = *argv;
-               }
        }
-#endif
+       if (argc)
+               usage();
 
        /*
         * Show per-interface statistics which don't need access to

Reply via email to