[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3 of 3 V4] xl: SWITCH_FOREACH_OPT handles special options directly
On Thu, 2013-01-03 at 11:39 +0000, Ian Campbell wrote: > # HG changeset patch > # User Ian Campbell <ijc@xxxxxxxxxxxxxx> > # Date 1357213146 0 > # Node ID 0d2f4198f2c3fd6574e9058a528ac5530332b14e > # Parent 1a1a2fa73670fd55004505b18a2b31418dcf447a > xl: SWITCH_FOREACH_OPT handles special options directly. > > This removes the need for the "case 0: case 2:" boilerplate in every > main_foo(). Calls exit(3) directly which is OK since xl cleans up the > context etc in an atexit(3) handler. > > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > -- > v4: exit() directly instead of returning. > > diff -r 1a1a2fa73670 -r 0d2f4198f2c3 tools/libxl/xl_cmdimpl.c > --- a/tools/libxl/xl_cmdimpl.c Thu Jan 03 11:38:48 2013 +0000 > +++ b/tools/libxl/xl_cmdimpl.c Thu Jan 03 11:39:06 2013 +0000 > @@ -2396,12 +2396,13 @@ static int def_getopt(int argc, char * c > * `lopts`) should be handled by a case statement as if it were inside > * a switch statement. > * > - * In addition to the options provided in opts callers must handle > - * two additional pseudo options: > - * 0 -- generated if the user passes a -h option. help will be printed, > - * caller should immediately return 0. > - * 2 -- generated if the user does not provided `num_required_opts` > - * non-option arguments, caller should immediately return 2. > + * In addition to the options provided in opts the macro will handle > + * the "help" option and enforce a minimum number of non-option > + * command line pearameters as follows: > + * -- if the user passes a -h or --help option. help will be printed, > + * and the macro will cause the process to exit with code 0. > + * -- if the user does not provided `num_required_opts` non-option > + * arguments, the macro will cause the process to exit with code 2. > * > * Example: > * > @@ -2409,8 +2410,6 @@ static int def_getopt(int argc, char * c > * int opt; > * > * SWITCH_FOREACH_OPT(opt, "blah", NULL, "foo", 0) { > - * case 0: case2: > - * return opt; > * case 'b': > * ... handle b option... > * break; > @@ -2426,6 +2425,8 @@ static int def_getopt(int argc, char * c > commandname, num_required_opts) \ > while (((opt) = def_getopt(argc, argv, (opts), (longopts), \ > (commandname), (num_required_opts))) != -1) \ > + if (opt == 0) exit(0); \ > + if (opt == 2) exit(2); \ > switch (opt) This is bogus due to the lack of a { after the while which leads to an infinite loop (the original case I tested was lucky enough not to hit it...) It's obviously a brain fart anyway -- I should push the exits down into def_getopt... Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |