common: Avoid unnecessary ambiguity in argparse.
authorDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Tue, 10 Jan 2017 20:59:36 +0000 (15:59 -0500)
committerDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Wed, 11 Jan 2017 07:32:20 +0000 (02:32 -0500)
* common/argparse.c (find_long_option): Avoid unnecessary ambiguity.
--

If two struct ARGPARSE_OPTS share a prefix in their long_opt name, but
have the exact same short_opt and flags, they are aliases and not
distinct options.  Avoid reporting this as an ambiguity, so that (for
example) both --clearsign and --clear-sign can be invoked as --clear.

Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
Debian-Bug-Id: 850475

common/argparse.c

index dce725a..d395229 100644 (file)
@@ -898,7 +898,9 @@ find_long_option( ARGPARSE_ARGS *arg,
            int j;
            for(j=i+1; opts[j].short_opt; j++ ) {
                if( opts[j].long_opt
-                   && !strncmp( opts[j].long_opt, keyword, n ) )
+                   && !strncmp( opts[j].long_opt, keyword, n )
+                    && !(opts[j].short_opt == opts[i].short_opt
+                         && opts[j].flags == opts[i].flags ) )
                    return -2;  /* abbreviation is ambiguous */
            }
            return i;