6

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.

Jonathan Leffler
  • 730,956
  • 141
  • 904
  • 1,278
Codeape
  • 288
  • 3
  • 14

3 Answers3

4

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 :-\

Jonathan Leffler
  • 730,956
  • 141
  • 904
  • 1,278
Will Tate
  • 33,439
  • 9
  • 77
  • 71
2

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.

2

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.

William Pursell
  • 204,365
  • 48
  • 270
  • 300