Turn off abbreviation in getopt_long (getopt.h)?

1k views Asked by At

Is it possible to turn off abbreviation in getopt_long()? From the man page:

Long option names may be abbreviated if the abbreviation is unique or is an exact match for some defined option.

I want to do this because the specification I have received for a piece of code requires a full-length exact match of the flags, and there are many flags.

3

There are 3 answers

0
Will Tate On BEST ANSWER

It appears there isn't a way to disable the abbreviation feature. You aren't alone in wishing for this feature. See: http://sourceware.org/bugzilla/show_bug.cgi?id=6863

Unfortunately, It seems the glibc developers don't want the option as the bug report linked above was resolved with "WONTFIX". You may be out of luck here :-\

0
William Pursell On

If you use argp_parse() instead of getopt() (highly reccommended, BTW), you can access the exact flag entered by the user through

state->argv[ state->next - 2 ]

It's a bit of a hack, but should work.

0
Hiroshi Araki On

This is not perfect solution but you can check exact arg given by a user after calling getopt_long() (normally within switch) like below:

if (strcmp(argv[optind-1], "--longoption") == 0)

optind points a next argument that you need to process. Thus, you can access the original arg using optind-1.