[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2 of 2] xl: treat sub-command main function like a regular C main() function
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1282574865 -3600 # Node ID c336fbc9175a6b5fec8a5cdf67bbe8354aacd5d0 # Parent 2210bb76868ff58c1c97738f43c52b3e893dd178 xl: treat sub-command main function like a regular C main() function Currently xl passes the entire argc+argv to each subcommand and relies on the preservation of the global optind variable to ensure that the subcommand correctly handles argument parsing (e.g. accounting for "xl [command]" vs "xl -v [command]"). This requirement for individual sub-commands to parse arguments relative to optind is subtle and prone to being forgotten (or simply not expected). Several sub-commands have recently been broken in this way (now fixed). Therefore arrange that the argv+argc passed to the sub-commands looks like you would expect for a regular C main function and includes argv[0] equal to the command name with command specific arguments in argv[1] onwards. Since all sub-commands (currently) correctly obey the optind it is sufficient to reset it to 1 (as described in getopt(3)) in order to not break the sub-commands own argument parsing. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> diff -r 2210bb76868f -r c336fbc9175a tools/libxl/xl.c --- a/tools/libxl/xl.c Mon Aug 23 15:34:14 2010 +0100 +++ b/tools/libxl/xl.c Mon Aug 23 15:47:45 2010 +0100 @@ -53,7 +53,7 @@ int main(int argc, char **argv) } } - cmd = argv[optind++]; + cmd = argv[optind]; if (!cmd) { help(NULL); @@ -69,13 +69,18 @@ int main(int argc, char **argv) exit(1); } + /* Reset options for per-command use of getopt. */ + argv += optind; + argc -= optind; + optind = 1; + srand(time(0)); cspec = cmdtable_lookup(cmd); if (cspec) ret = cspec->cmd_impl(argc, argv); else if (!strcmp(cmd, "help")) { - help(argv[optind]); + help(argv[1]); ret = 0; } else { fprintf(stderr, "command not implemented\n"); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |