tags:

views:

15

answers:

1

I would like to delegate to one of several possible lists of arguments based on whether particular arguments are present, along the lines of:

./test --do-thing-1 --option-A=7 --common-option --option-B=2 # options C and D not valid
./test --do-thing-2 --option-C=9 --common-option --option-D=1 # options A and B not valid

And the best way I can think of to do this neatly is to have main() process all the common options, and decide which of several functions to call to process the remainder.

Note that I don't want to restrict the order so that common options can only occur first.

My problem is that if I reset optind to 1 before parsing the arguments for a second time, getopt_long segfaults by passing an invalid string to strncmp - so I guess I shouldn't be messing with optind.

I've had a google, and can't find any reference on whether it is possible to jump around the getopt_long argument list (I know it is possible for getopt), if it is, how do I do it?

I would prefer not to use any non-standard libraries. (Language is plain c, no c++ please)

A: 

My problem was that I hadn't set the last row of my static struct option long_options[] array to zeros, setting this correctly fixes the error.

GNU getopt also requires optind to be reset to 0 not 1 in order to correctly reset its internal state.

Autopulated