* [PATCH 1 of 3 V4] xl: allow def_getopt to handle long options
2013-01-03 11:39 [PATCH 0 of 3 V4] xl: add helpers for option parsing Ian Campbell
@ 2013-01-03 11:39 ` Ian Campbell
2013-01-03 11:39 ` [PATCH 2 of 3 V4] xl: Introduce helper macro for option parsing Ian Campbell
` (2 subsequent siblings)
3 siblings, 0 replies; 9+ messages in thread
From: Ian Campbell @ 2013-01-03 11:39 UTC (permalink / raw)
To: xen-devel; +Cc: Ian Jackson
# HG changeset patch
# User Ian Campbell <ijc@hellion.org.uk>
# Date 1357211018 0
# Node ID a229cbca375a438829955b993bde259602371714
# Parent 37fa76723566bd0a180e436a9c6fee3451b6e5ab
xl: allow def_getopt to handle long options
Improves consistency of option parsing and error handling.
Consistently support --help for all options.
Many users of getopt_long were needlessly passing an option_index
pointer which was not used.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
diff -r 37fa76723566 -r a229cbca375a tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c Thu Jan 03 11:03:37 2013 +0000
+++ b/tools/libxl/xl_cmdimpl.c Thu Jan 03 11:03:38 2013 +0000
@@ -2324,19 +2324,34 @@ static int64_t parse_mem_size_kb(const c
return kbytes;
}
-static int def_getopt(int argc, char * const argv[], const char *optstring,
+#define COMMON_LONG_OPTS {"help", 0, 0, 'h'}
+
+static int def_getopt(int argc, char * const argv[],
+ const char *optstring,
+ const struct option *longopts,
const char* helpstr, int reqargs)
{
int opt;
+ const struct option def_options[] = {
+ COMMON_LONG_OPTS,
+ {0, 0, 0, 0}
+ };
+
+ if (!longopts)
+ longopts = def_options;
opterr = 0;
- while ((opt = getopt(argc, argv, optstring)) == '?') {
+ while ((opt = getopt_long(argc, argv, optstring, longopts, NULL)) == '?') {
if (optopt == 'h') {
help(helpstr);
return 0;
}
fprintf(stderr, "option `%c' not supported.\n", optopt);
}
+ if (opt == 'h') {
+ help(helpstr);
+ return 0;
+ }
if (opt != -1)
return opt;
@@ -2372,7 +2387,7 @@ int main_memmax(int argc, char **argv)
char *mem;
int rc;
- if ((opt = def_getopt(argc, argv, "", "mem-max", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "mem-max", 2)) != -1)
return opt;
domid = find_domain(argv[optind]);
@@ -2406,7 +2421,7 @@ int main_memset(int argc, char **argv)
int opt = 0;
const char *mem;
- if ((opt = def_getopt(argc, argv, "", "mem-set", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "mem-set", 2)) != -1)
return opt;
domid = find_domain(argv[optind]);
@@ -2445,7 +2460,7 @@ int main_cd_eject(int argc, char **argv)
int opt = 0;
const char *virtdev;
- if ((opt = def_getopt(argc, argv, "", "cd-eject", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "cd-eject", 2)) != -1)
return opt;
domid = find_domain(argv[optind]);
@@ -2462,7 +2477,7 @@ int main_cd_insert(int argc, char **argv
const char *virtdev;
char *file = NULL; /* modified by cd_insert tokenising it */
- if ((opt = def_getopt(argc, argv, "", "cd-insert", 3)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "cd-insert", 3)) != -1)
return opt;
domid = find_domain(argv[optind]);
@@ -2479,7 +2494,7 @@ int main_console(int argc, char **argv)
int opt = 0, num = 0;
libxl_console_type type = 0;
- while ((opt = def_getopt(argc, argv, "n:t:", "console", 1)) != -1) {
+ while ((opt = def_getopt(argc, argv, "n:t:", NULL, "console", 1)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -2510,36 +2525,23 @@ int main_console(int argc, char **argv)
int main_vncviewer(int argc, char **argv)
{
- static const struct option long_options[] = {
+ static const struct option opts[] = {
{"autopass", 0, 0, 'a'},
{"vncviewer-autopass", 0, 0, 'a'},
- {"help", 0, 0, 'h'},
+ COMMON_LONG_OPTS,
{0, 0, 0, 0}
};
uint32_t domid;
int opt, autopass = 0;
- while (1) {
- opt = getopt_long(argc, argv, "ah", long_options, NULL);
- if (opt == -1)
- break;
-
+ while ((opt = def_getopt(argc, argv, "ah", opts, "vncviewer", 1)) != -1) {
switch (opt) {
+ case 0: case 2:
+ return opt;
case 'a':
autopass = 1;
break;
- case 'h':
- help("vncviewer");
- return 0;
- default:
- fprintf(stderr, "option `%c' not supported.\n", optopt);
- break;
- }
- }
-
- if (argc - optind != 1) {
- help("vncviewer");
- return 2;
+ }
}
domid = find_domain(argv[optind]);
@@ -2572,7 +2574,7 @@ int main_pcilist(int argc, char **argv)
uint32_t domid;
int opt;
- if ((opt = def_getopt(argc, argv, "", "pci-list", 1)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "pci-list", 1)) != -1)
return opt;
domid = find_domain(argv[optind]);
@@ -2611,7 +2613,7 @@ int main_pcidetach(int argc, char **argv
int force = 0;
const char *bdf = NULL;
- while ((opt = def_getopt(argc, argv, "f", "pci-detach", 2)) != -1) {
+ while ((opt = def_getopt(argc, argv, "f", NULL, "pci-detach", 2)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -2653,7 +2655,7 @@ int main_pciattach(int argc, char **argv
int opt;
const char *bdf = NULL, *vs = NULL;
- if ((opt = def_getopt(argc, argv, "", "pci-attach", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "pci-attach", 2)) != -1)
return opt;
domid = find_domain(argv[optind]);
@@ -2687,7 +2689,7 @@ int main_pciassignable_list(int argc, ch
{
int opt;
- if ((opt = def_getopt(argc, argv, "", "pci-assignable-list", 0)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "pci-assignable-list", 0)) != -1)
return opt;
pciassignable_list();
@@ -2719,7 +2721,7 @@ int main_pciassignable_add(int argc, cha
int opt;
const char *bdf = NULL;
- while ((opt = def_getopt(argc, argv, "", "pci-assignable-add", 1)) != -1) {
+ while ((opt = def_getopt(argc, argv, "", NULL, "pci-assignable-add", 1)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -2758,7 +2760,7 @@ int main_pciassignable_remove(int argc,
const char *bdf = NULL;
int rebind = 0;
- while ((opt = def_getopt(argc, argv, "r", "pci-assignable-remove", 1)) != -1) {
+ while ((opt = def_getopt(argc, argv, "r", NULL, "pci-assignable-remove", 1)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -3569,24 +3571,18 @@ int main_restore(int argc, char **argv)
int paused = 0, debug = 0, daemonize = 1, monitor = 1,
console_autoconnect = 0, vnc = 0, vncautopass = 0;
int opt, rc;
- int option_index = 0;
- static struct option long_options[] = {
+ static struct option opts[] = {
{"vncviewer", 0, 0, 'V'},
{"vncviewer-autopass", 0, 0, 'A'},
+ COMMON_LONG_OPTS,
{0, 0, 0, 0}
};
- while (1) {
- opt = getopt_long(argc, argv, "FhcpdeVA", long_options, &option_index);
- if (opt == -1)
- break;
-
+ while ((opt = def_getopt(argc, argv, "FhcpdeVA",
+ opts, "restore", 1)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
- case 'h':
- help("restore");
- return 2;
case 'c':
console_autoconnect = 1;
break;
@@ -3646,7 +3642,7 @@ int main_migrate_receive(int argc, char
int debug = 0, daemonize = 1, monitor = 1, remus = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "Fedr", "migrate-receive", 0)) != -1) {
+ while ((opt = def_getopt(argc, argv, "Fedr", NULL, "migrate-receive", 0)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -3685,7 +3681,7 @@ int main_save(int argc, char **argv)
int checkpoint = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "c", "save", 2)) != -1) {
+ while ((opt = def_getopt(argc, argv, "c", NULL, "save", 2)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -3718,7 +3714,7 @@ int main_migrate(int argc, char **argv)
char *host;
int opt, daemonize = 1, monitor = 1, debug = 0;
- while ((opt = def_getopt(argc, argv, "FC:s:ed", "migrate", 2)) != -1) {
+ while ((opt = def_getopt(argc, argv, "FC:s:ed", NULL, "migrate", 2)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -3762,7 +3758,7 @@ int main_dump_core(int argc, char **argv
{
int opt;
- if ((opt = def_getopt(argc, argv, "", "dump-core", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "dump-core", 2)) != -1)
return opt;
core_dump_domain(find_domain(argv[optind]), argv[optind + 1]);
@@ -3773,7 +3769,7 @@ int main_pause(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", "pause", 1)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "pause", 1)) != -1)
return opt;
pause_domain(find_domain(argv[optind]));
@@ -3785,7 +3781,7 @@ int main_unpause(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", "unpause", 1)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "unpause", 1)) != -1)
return opt;
unpause_domain(find_domain(argv[optind]));
@@ -3797,7 +3793,7 @@ int main_destroy(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", "destroy", 1)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "destroy", 1)) != -1)
return opt;
destroy_domain(find_domain(argv[optind]));
@@ -3806,19 +3802,21 @@ int main_destroy(int argc, char **argv)
static int main_shutdown_or_reboot(int do_reboot, int argc, char **argv)
{
+ const char *what = do_reboot ? "reboot" : "shutdown";
void (*fn)(uint32_t domid,
libxl_evgen_domain_death **, libxl_ev_user, int) =
do_reboot ? &reboot_domain : &shutdown_domain;
int opt, i, nb_domain;
int wait_for_it = 0, all =0;
int fallback_trigger = 0;
- static struct option long_options[] = {
+ static struct option opts[] = {
{"all", 0, 0, 'a'},
{"wait", 0, 0, 'w'},
+ COMMON_LONG_OPTS,
{0, 0, 0, 0}
};
- while ((opt = getopt_long(argc, argv, "awF", long_options, NULL)) != -1) {
+ while ((opt = def_getopt(argc, argv, "awF", opts, what, 0)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -3890,12 +3888,11 @@ int main_list(int argc, char **argv)
int opt, verbose = 0;
int context = 0;
int details = 0;
- int option_index = 0;
- static struct option long_options[] = {
+ static struct option opts[] = {
{"long", 0, 0, 'l'},
- {"help", 0, 0, 'h'},
{"verbose", 0, 0, 'v'},
{"context", 0, 0, 'Z'},
+ COMMON_LONG_OPTS,
{0, 0, 0, 0}
};
@@ -3903,12 +3900,10 @@ int main_list(int argc, char **argv)
libxl_dominfo *info, *info_free=0;
int nb_domain, rc;
- while (1) {
- opt = getopt_long(argc, argv, "lvhZ", long_options, &option_index);
- if (opt == -1)
- break;
-
+ while ((opt = def_getopt(argc, argv, "lvhZ", opts, "list", 0)) != -1) {
switch (opt) {
+ case 0: case 2:
+ return opt;
case 'l':
details = 1;
break;
@@ -3921,9 +3916,6 @@ int main_list(int argc, char **argv)
case 'Z':
context = 1;
break;
- default:
- fprintf(stderr, "option `%c' not supported.\n", optopt);
- break;
}
}
@@ -3970,7 +3962,7 @@ int main_vm_list(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", "vm-list", 0)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "vm-list", 0)) != -1)
return opt;
list_vm();
@@ -3986,14 +3978,13 @@ int main_create(int argc, char **argv)
int paused = 0, debug = 0, daemonize = 1, console_autoconnect = 0,
quiet = 0, monitor = 1, vnc = 0, vncautopass = 0;
int opt, rc;
- int option_index = 0;
- static struct option long_options[] = {
+ static struct option opts[] = {
{"dryrun", 0, 0, 'n'},
{"quiet", 0, 0, 'q'},
- {"help", 0, 0, 'h'},
{"defconfig", 1, 0, 'f'},
{"vncviewer", 0, 0, 'V'},
{"vncviewer-autopass", 0, 0, 'A'},
+ COMMON_LONG_OPTS,
{0, 0, 0, 0}
};
@@ -4002,12 +3993,10 @@ int main_create(int argc, char **argv)
argc--; argv++;
}
- while (1) {
- opt = getopt_long(argc, argv, "Fhnqf:pcdeVA", long_options, &option_index);
- if (opt == -1)
- break;
-
+ while ((opt = def_getopt(argc, argv, "Fhnqf:pcdeVA", opts, "create", 0)) != -1) {
switch (opt) {
+ case 0: case 2:
+ return opt;
case 'f':
filename = optarg;
break;
@@ -4042,9 +4031,6 @@ int main_create(int argc, char **argv)
case 'A':
vnc = vncautopass = 1;
break;
- default:
- fprintf(stderr, "option `%c' not supported.\n", optopt);
- break;
}
}
@@ -4092,11 +4078,10 @@ int main_config_update(int argc, char **
int config_len = 0;
libxl_domain_config d_config;
int opt, rc;
- int option_index = 0;
int debug = 0;
- static struct option long_options[] = {
- {"help", 0, 0, 'h'},
+ static struct option opts[] = {
{"defconfig", 1, 0, 'f'},
+ COMMON_LONG_OPTS,
{0, 0, 0, 0}
};
@@ -4114,24 +4099,16 @@ int main_config_update(int argc, char **
argc--; argv++;
}
- while (1) {
- opt = getopt_long(argc, argv, "dhqf:", long_options, &option_index);
- if (opt == -1)
- break;
-
+ while ((opt = def_getopt(argc, argv, "dhqf:", opts, "config_update", 0)) != -1) {
switch (opt) {
+ case 0: case 2:
+ return opt;
case 'd':
debug = 1;
break;
case 'f':
filename = optarg;
break;
- case 'h':
- help("create");
- return 0;
- default:
- fprintf(stderr, "option `%c' not supported.\n", optopt);
- break;
}
}
@@ -4220,7 +4197,7 @@ int main_button_press(int argc, char **a
fprintf(stderr, "WARNING: \"button-press\" is deprecated. "
"Please use \"trigger\"\n");
- if ((opt = def_getopt(argc, argv, "", "button-press", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "button-press", 2)) != -1)
return opt;
button_press(find_domain(argv[optind]), argv[optind + 1]);
@@ -4361,7 +4338,7 @@ int main_vcpulist(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", "cpu-list", 0)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "cpu-list", 0)) != -1)
return opt;
vcpulist(argc - optind, argv + optind);
@@ -4422,7 +4399,7 @@ int main_vcpupin(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", "vcpu-pin", 3)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "vcpu-pin", 3)) != -1)
return opt;
vcpupin(find_domain(argv[optind]), argv[optind+1] , argv[optind+2]);
@@ -4458,7 +4435,7 @@ int main_vcpuset(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", "vcpu-set", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "vcpu-set", 2)) != -1)
return opt;
vcpuset(find_domain(argv[optind]), argv[optind+1]);
@@ -4634,25 +4611,20 @@ static void print_info(int numa)
int main_info(int argc, char **argv)
{
int opt;
- int option_index = 0;
- static struct option long_options[] = {
- {"help", 0, 0, 'h'},
+ static struct option opts[] = {
{"numa", 0, 0, 'n'},
+ COMMON_LONG_OPTS,
{0, 0, 0, 0}
};
int numa = 0;
- while ((opt = getopt_long(argc, argv, "hn", long_options, &option_index)) != -1) {
+ while ((opt = def_getopt(argc, argv, "hn", opts, "info", 0)) != -1) {
switch (opt) {
- case 'h':
- help("info");
- return 0;
+ case 0: case 2:
+ return opt;
case 'n':
numa = 1;
break;
- default:
- fprintf(stderr, "option `%c' not supported.\n", optopt);
- break;
}
}
@@ -4687,7 +4659,7 @@ int main_sharing(int argc, char **argv)
libxl_dominfo *info, *info_free = NULL;
int nb_domain, rc;
- if ((opt = def_getopt(argc, argv, "", "sharing", 0)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "sharing", 0)) != -1)
return opt;
if (optind >= argc) {
@@ -4956,8 +4928,7 @@ int main_sched_credit(int argc, char **a
int opt_s = 0;
int tslice = 0, opt_t = 0, ratelimit = 0, opt_r = 0;
int opt, rc;
- int option_index = 0;
- static struct option long_options[] = {
+ static struct option opts[] = {
{"domain", 1, 0, 'd'},
{"weight", 1, 0, 'w'},
{"cap", 1, 0, 'c'},
@@ -4965,15 +4936,11 @@ int main_sched_credit(int argc, char **a
{"tslice_ms", 1, 0, 't'},
{"ratelimit_us", 1, 0, 'r'},
{"cpupool", 1, 0, 'p'},
- {"help", 0, 0, 'h'},
+ COMMON_LONG_OPTS,
{0, 0, 0, 0}
};
- while (1) {
- opt = getopt_long(argc, argv, "d:w:c:p:t:r:hs", long_options,
- &option_index);
- if (opt == -1)
- break;
+ while ((opt = def_getopt(argc, argv, "d:w:c:p:t:r:hs", opts, "sched-credit", 0)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -5002,9 +4969,6 @@ int main_sched_credit(int argc, char **a
case 'p':
cpupool = optarg;
break;
- case 'h':
- help("sched-credit");
- return 0;
}
}
@@ -5087,19 +5051,15 @@ int main_sched_credit2(int argc, char **
const char *cpupool = NULL;
int weight = 256, opt_w = 0;
int opt, rc;
- int option_index = 0;
- static struct option long_options[] = {
+ static struct option opts[] = {
{"domain", 1, 0, 'd'},
{"weight", 1, 0, 'w'},
{"cpupool", 1, 0, 'p'},
- {"help", 0, 0, 'h'},
+ COMMON_LONG_OPTS,
{0, 0, 0, 0}
};
- while (1) {
- opt = getopt_long(argc, argv, "d:w:p:h", long_options, &option_index);
- if (opt == -1)
- break;
+ while ((opt = def_getopt(argc, argv, "d:w:p:h", opts, "sched-credit2", 0)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -5113,9 +5073,6 @@ int main_sched_credit2(int argc, char **
case 'p':
cpupool = optarg;
break;
- case 'h':
- help("sched-credit");
- return 0;
}
}
@@ -5166,23 +5123,18 @@ int main_sched_sedf(int argc, char **arg
int extra = 0, opt_e = 0;
int weight = 0, opt_w = 0;
int opt, rc;
- int option_index = 0;
- static struct option long_options[] = {
+ static struct option opts[] = {
{"period", 1, 0, 'p'},
{"slice", 1, 0, 's'},
{"latency", 1, 0, 'l'},
{"extra", 1, 0, 'e'},
{"weight", 1, 0, 'w'},
{"cpupool", 1, 0, 'c'},
- {"help", 0, 0, 'h'},
+ COMMON_LONG_OPTS,
{0, 0, 0, 0}
};
- while (1) {
- opt = getopt_long(argc, argv, "d:p:s:l:e:w:c:h", long_options,
- &option_index);
- if (opt == -1)
- break;
+ while ((opt = def_getopt(argc, argv, "d:p:s:l:e:w:c:h", opts, "sched-sedf", 0)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -5212,9 +5164,6 @@ int main_sched_sedf(int argc, char **arg
case 'c':
cpupool = optarg;
break;
- case 'h':
- help("sched-sedf");
- return 0;
}
}
@@ -5282,7 +5231,7 @@ int main_domid(int argc, char **argv)
int opt;
const char *domname = NULL;
- if ((opt = def_getopt(argc, argv, "", "domid", 1)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "domid", 1)) != -1)
return opt;
domname = argv[optind];
@@ -5304,7 +5253,7 @@ int main_domname(int argc, char **argv)
char *domname = NULL;
char *endptr = NULL;
- if ((opt = def_getopt(argc, argv, "", "domname", 1)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "domname", 1)) != -1)
return opt;
domid = strtol(argv[optind], &endptr, 10);
@@ -5332,7 +5281,7 @@ int main_rename(int argc, char **argv)
int opt;
const char *dom, *new_name;
- if ((opt = def_getopt(argc, argv, "", "rename", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "rename", 2)) != -1)
return opt;
dom = argv[optind++];
@@ -5356,7 +5305,7 @@ int main_trigger(int argc, char **argv)
const char *trigger_name = NULL;
libxl_trigger trigger;
- if ((opt = def_getopt(argc, argv, "", "trigger", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "trigger", 2)) != -1)
return opt;
domid = find_domain(argv[optind++]);
@@ -5386,7 +5335,7 @@ int main_sysrq(int argc, char **argv)
int opt;
const char *sysrq = NULL;
- if ((opt = def_getopt(argc, argv, "", "sysrq", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "sysrq", 2)) != -1)
return opt;
domid = find_domain(argv[optind++]);
@@ -5409,7 +5358,7 @@ int main_debug_keys(int argc, char **arg
int opt;
char *keys;
- if ((opt = def_getopt(argc, argv, "", "debug-keys", 1)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "debug-keys", 1)) != -1)
return opt;
keys = argv[optind];
@@ -5429,7 +5378,7 @@ int main_dmesg(int argc, char **argv)
char *line;
int opt, ret = 1;
- while ((opt = def_getopt(argc, argv, "c", "dmesg", 0)) != -1) {
+ while ((opt = def_getopt(argc, argv, "c", NULL, "dmesg", 0)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -5455,7 +5404,7 @@ int main_top(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", "top", 0)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "top", 0)) != -1)
return opt;
return system("xentop");
@@ -5472,7 +5421,7 @@ int main_networkattach(int argc, char **
int i;
unsigned int val;
- if ((opt = def_getopt(argc, argv, "", "network-attach", 1)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "network-attach", 1)) != -1)
return opt;
if (argc-optind > 11) {
@@ -5559,7 +5508,7 @@ int main_networklist(int argc, char **ar
libxl_nicinfo nicinfo;
int nb, i;
- if ((opt = def_getopt(argc, argv, "", "network-list", 1)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "network-list", 1)) != -1)
return opt;
/* Idx BE MAC Hdl Sta evch txr/rxr BE-path */
@@ -5596,7 +5545,7 @@ int main_networkdetach(int argc, char **
int opt;
libxl_device_nic nic;
- if ((opt = def_getopt(argc, argv, "", "network-detach", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "network-detach", 2)) != -1)
return opt;
domid = find_domain(argv[optind]);
@@ -5627,7 +5576,7 @@ int main_blockattach(int argc, char **ar
libxl_device_disk disk = { 0 };
XLU_Config *config = 0;
- if ((opt = def_getopt(argc, argv, "", "block-attach", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "block-attach", 2)) != -1)
return opt;
if (domain_qualifier_to_domid(argv[optind], &fe_domid, 0) < 0) {
@@ -5662,7 +5611,7 @@ int main_blocklist(int argc, char **argv
libxl_device_disk *disks;
libxl_diskinfo diskinfo;
- if ((opt = def_getopt(argc, argv, "", "block-list", 1)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "block-list", 1)) != -1)
return opt;
printf("%-5s %-3s %-6s %-5s %-6s %-8s %-30s\n",
@@ -5698,7 +5647,7 @@ int main_blockdetach(int argc, char **ar
int opt, rc = 0;
libxl_device_disk disk;
- if ((opt = def_getopt(argc, argv, "", "block-detach", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "block-detach", 2)) != -1)
return opt;
domid = find_domain(argv[optind]);
@@ -5723,7 +5672,7 @@ int main_vtpmattach(int argc, char **arg
unsigned int val;
uint32_t domid;
- if ((opt = def_getopt(argc, argv, "", "vtpm-attach", 1)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "vtpm-attach", 1)) != -1)
return opt;
if (domain_qualifier_to_domid(argv[optind], &domid, 0) < 0) {
@@ -5776,7 +5725,7 @@ int main_vtpmlist(int argc, char **argv)
libxl_vtpminfo vtpminfo;
int nb, i;
- if ((opt = def_getopt(argc, argv, "", "vtpm-list", 1)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "vtpm-list", 1)) != -1)
return opt;
/* Idx BE UUID Hdl Sta evch rref BE-path */
@@ -5816,7 +5765,7 @@ int main_vtpmdetach(int argc, char **arg
libxl_device_vtpm vtpm;
libxl_uuid uuid;
- if ((opt = def_getopt(argc, argv, "", "vtpm-detach", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "vtpm-detach", 2)) != -1)
return opt;
domid = find_domain(argv[optind]);
@@ -6008,7 +5957,7 @@ int main_uptime(int argc, char **argv)
int nb_doms = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "s", "uptime", 1)) != -1) {
+ while ((opt = def_getopt(argc, argv, "s", NULL, "uptime", 1)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -6035,7 +5984,7 @@ int main_tmem_list(int argc, char **argv
int all = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "al", "tmem-list", 0)) != -1) {
+ while ((opt = def_getopt(argc, argv, "al", NULL, "tmem-list", 0)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -6076,7 +6025,7 @@ int main_tmem_freeze(int argc, char **ar
int all = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "a", "tmem-freeze", 0)) != -1) {
+ while ((opt = def_getopt(argc, argv, "a", NULL, "tmem-freeze", 0)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -6109,7 +6058,7 @@ int main_tmem_thaw(int argc, char **argv
int all = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "a", "tmem-thaw", 0)) != -1) {
+ while ((opt = def_getopt(argc, argv, "a", NULL, "tmem-thaw", 0)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -6144,7 +6093,7 @@ int main_tmem_set(int argc, char **argv)
int all = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "aw:c:p:", "tmem-set", 0)) != -1) {
+ while ((opt = def_getopt(argc, argv, "aw:c:p:", NULL, "tmem-set", 0)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -6205,7 +6154,7 @@ int main_tmem_shared_auth(int argc, char
int all = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "au:A:", "tmem-shared-auth", 0)) != -1) {
+ while ((opt = def_getopt(argc, argv, "au:A:", NULL, "tmem-shared-auth", 0)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
@@ -6255,7 +6204,7 @@ int main_tmem_freeable(int argc, char **
int opt;
int mb;
- if ((opt = def_getopt(argc, argv, "", "tmem-freeable", 0)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "tmem-freeable", 0)) != -1)
return opt;
mb = libxl_tmem_freeable(ctx);
@@ -6272,11 +6221,10 @@ int main_cpupoolcreate(int argc, char **
const char *p;
char extra_config[1024];
int opt;
- int option_index = 0;
- static struct option long_options[] = {
- {"help", 0, 0, 'h'},
+ static struct option opts[] = {
{"defconfig", 1, 0, 'f'},
{"dryrun", 0, 0, 'n'},
+ COMMON_LONG_OPTS,
{0, 0, 0, 0}
};
int ret;
@@ -6294,26 +6242,18 @@ int main_cpupoolcreate(int argc, char **
libxl_bitmap cpumap;
libxl_uuid uuid;
libxl_cputopology *topology;
- int rc = -ERROR_FAIL;
-
- while (1) {
- opt = getopt_long(argc, argv, "hnf:", long_options, &option_index);
- if (opt == -1)
- break;
-
+ int rc = -ERROR_FAIL;
+
+ while ((opt = def_getopt(argc, argv, "hnf:", opts, "cpupool-create", 0)) != -1) {
switch (opt) {
+ case 0: case 2:
+ return opt;
case 'f':
filename = optarg;
break;
- case 'h':
- help("cpupool-create");
- return 0;
case 'n':
dryrun_only = 1;
break;
- default:
- fprintf(stderr, "option `%c' not supported.\n", optopt);
- break;
}
}
@@ -6476,10 +6416,9 @@ out:
int main_cpupoollist(int argc, char **argv)
{
int opt;
- int option_index = 0;
- static struct option long_options[] = {
- {"help", 0, 0, 'h'},
+ static struct option opts[] = {
{"cpus", 0, 0, 'c'},
+ COMMON_LONG_OPTS,
{0, 0, 0, 0}
};
int opt_cpus = 0;
@@ -6490,28 +6429,16 @@ int main_cpupoollist(int argc, char **ar
char *name;
int ret = 0;
- while (1) {
- opt = getopt_long(argc, argv, "hc", long_options, &option_index);
- if (opt == -1)
+ while ((opt = def_getopt(argc, argv, "hc", opts, "cpupool-list", 1)) != -1) {
+ switch (opt) {
+ case 0: case 2:
break;
-
- switch (opt) {
- case 'h':
- help("cpupool-list");
- return 0;
case 'c':
opt_cpus = 1;
break;
- default:
- fprintf(stderr, "option `%c' not supported.\n", optopt);
- break;
- }
- }
-
- if ((optind + 1) < argc) {
- help("cpupool-list");
- return -ERROR_FAIL;
- }
+ }
+ }
+
if (optind < argc) {
pool = argv[optind];
if (libxl_name_to_cpupoolid(ctx, pool, &poolid)) {
@@ -6569,7 +6496,7 @@ int main_cpupooldestroy(int argc, char *
const char *pool;
uint32_t poolid;
- if ((opt = def_getopt(argc, argv, "", "cpupool-destroy", 1)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "cpupool-destroy", 1)) != -1)
return opt;
pool = argv[optind];
@@ -6590,7 +6517,7 @@ int main_cpupoolrename(int argc, char **
const char *new_name;
uint32_t poolid;
- if ((opt = def_getopt(argc, argv, "", "cpupool-rename", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "cpupool-rename", 2)) != -1)
return opt;
pool = argv[optind++];
@@ -6620,7 +6547,7 @@ int main_cpupoolcpuadd(int argc, char **
int node;
int n;
- if ((opt = def_getopt(argc, argv, "", "cpupool-cpu-add", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "cpupool-cpu-add", 2)) != -1)
return opt;
pool = argv[optind++];
@@ -6664,7 +6591,7 @@ int main_cpupoolcpuremove(int argc, char
int node;
int n;
- if ((opt = def_getopt(argc, argv, "", "cpupool-cpu-remove", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "cpupool-cpu-remove", 2)) != -1)
return opt;
pool = argv[optind++];
@@ -6707,7 +6634,7 @@ int main_cpupoolmigrate(int argc, char *
const char *dom;
uint32_t domid;
- if ((opt = def_getopt(argc, argv, "", "cpupool-migrate", 2)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "cpupool-migrate", 2)) != -1)
return opt;
dom = argv[optind++];
@@ -6747,7 +6674,7 @@ int main_cpupoolnumasplit(int argc, char
libxl_cputopology *topology;
libxl_dominfo info;
- if ((opt = def_getopt(argc, argv, "", "cpupool-numa-split", 0)) != -1)
+ if ((opt = def_getopt(argc, argv, "", NULL, "cpupool-numa-split", 0)) != -1)
return opt;
ret = 0;
@@ -7000,7 +6927,7 @@ int main_remus(int argc, char **argv)
r_info.blackhole = 0;
r_info.compression = 1;
- while ((opt = def_getopt(argc, argv, "bui:s:e", "remus", 2)) != -1) {
+ while ((opt = def_getopt(argc, argv, "bui:s:e", NULL, "remus", 2)) != -1) {
switch (opt) {
case 0: case 2:
return opt;
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2 of 3 V4] xl: Introduce helper macro for option parsing
2013-01-03 11:39 [PATCH 0 of 3 V4] xl: add helpers for option parsing Ian Campbell
2013-01-03 11:39 ` [PATCH 1 of 3 V4] xl: allow def_getopt to handle long options Ian Campbell
@ 2013-01-03 11:39 ` Ian Campbell
2013-01-03 11:39 ` [PATCH 3 of 3 V4] xl: SWITCH_FOREACH_OPT handles special options directly Ian Campbell
2013-01-24 11:55 ` [PATCH 0 of 3 V4] xl: add helpers for option parsing Ian Campbell
3 siblings, 0 replies; 9+ messages in thread
From: Ian Campbell @ 2013-01-03 11:39 UTC (permalink / raw)
To: xen-devel; +Cc: Ian Jackson
# HG changeset patch
# User Ian Campbell <ijc@hellion.org.uk>
# Date 1357213128 0
# Node ID 1a1a2fa73670fd55004505b18a2b31418dcf447a
# Parent a229cbca375a438829955b993bde259602371714
xl: Introduce helper macro for option parsing.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
v3:
- drop underscores from macro params.
- improved macro documentation.
v2:
- s/FOREACH_OPT/SWITCH_FOREACH_OPT/
- Document the macro
diff -r a229cbca375a -r 1a1a2fa73670 tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c Thu Jan 03 11:03:38 2013 +0000
+++ b/tools/libxl/xl_cmdimpl.c Thu Jan 03 11:38:48 2013 +0000
@@ -2326,6 +2326,10 @@ static int64_t parse_mem_size_kb(const c
#define COMMON_LONG_OPTS {"help", 0, 0, 'h'}
+/*
+ * Callers should use SWITCH_FOREACH_OPT in preference to calling this
+ * directly.
+ */
static int def_getopt(int argc, char * const argv[],
const char *optstring,
const struct option *longopts,
@@ -2364,6 +2368,66 @@ static int def_getopt(int argc, char * c
return -1;
}
+/*
+ * Wraps def_getopt into a convenient loop+switch to process all
+ * arguments. This macro is intended to be called from main_XXX().
+ *
+ * SWITCH_FOREACH_OPT(int *opt, const char *opts,
+ * const struct option *longopts,
+ * const char *commandname,
+ * int num_opts_req) { ...
+ *
+ * opt: pointer to an int variable, holds the current option
+ * during processing.
+ * opts: short options, as per getopt_long(3)'s optstring argument.
+ * longopts: long options, as per getopt_long(3)'s longopts argument.
+ * May be null.
+ * commandname: name of this command, for usage string.
+ * num_required_opts: number of non-option command line parameters
+ * which are required.
+ *
+ * In addition the calling context is expected to contain variables
+ * "argc" and "argv" in the conventional C-style:
+ * main(int argc, char **argv)
+ * manner.
+ *
+ * Callers should treat SWITCH_FOREACH_OPT as they would a switch
+ * statement over the value of `opt`. Each option given in `opts` (or
+ * `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.
+ *
+ * Example:
+ *
+ * int main_foo(int argc, char **argv) {
+ * int opt;
+ *
+ * SWITCH_FOREACH_OPT(opt, "blah", NULL, "foo", 0) {
+ * case 0: case2:
+ * return opt;
+ * case 'b':
+ * ... handle b option...
+ * break;
+ * case 'l':
+ * ... handle l option ...
+ * break;
+ * case etc etc...
+ * }
+ * ... do something useful with the options ...
+ * }
+ */
+#define SWITCH_FOREACH_OPT(opt, opts, longopts, \
+ commandname, num_required_opts) \
+ while (((opt) = def_getopt(argc, argv, (opts), (longopts), \
+ (commandname), (num_required_opts))) != -1) \
+ switch (opt)
+
static int set_memory_max(uint32_t domid, const char *mem)
{
int64_t memorykb;
@@ -2387,8 +2451,10 @@ int main_memmax(int argc, char **argv)
char *mem;
int rc;
- if ((opt = def_getopt(argc, argv, "", NULL, "mem-max", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "mem-max", 2) {
+ case 0: case 2:
return opt;
+ }
domid = find_domain(argv[optind]);
mem = argv[optind + 1];
@@ -2421,8 +2487,10 @@ int main_memset(int argc, char **argv)
int opt = 0;
const char *mem;
- if ((opt = def_getopt(argc, argv, "", NULL, "mem-set", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "mem-set", 2) {
+ case 0: case 2:
return opt;
+ }
domid = find_domain(argv[optind]);
mem = argv[optind + 1];
@@ -2460,8 +2528,10 @@ int main_cd_eject(int argc, char **argv)
int opt = 0;
const char *virtdev;
- if ((opt = def_getopt(argc, argv, "", NULL, "cd-eject", 2)) != -1)
- return opt;
+ SWITCH_FOREACH_OPT(opt, "", NULL, "cd-eject", 2) {
+ case 0: case 2:
+ return opt;
+ }
domid = find_domain(argv[optind]);
virtdev = argv[optind + 1];
@@ -2477,8 +2547,10 @@ int main_cd_insert(int argc, char **argv
const char *virtdev;
char *file = NULL; /* modified by cd_insert tokenising it */
- if ((opt = def_getopt(argc, argv, "", NULL, "cd-insert", 3)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "cd-insert", 3) {
+ case 0: case 2:
return opt;
+ }
domid = find_domain(argv[optind]);
virtdev = argv[optind + 1];
@@ -2494,24 +2566,22 @@ int main_console(int argc, char **argv)
int opt = 0, num = 0;
libxl_console_type type = 0;
- while ((opt = def_getopt(argc, argv, "n:t:", NULL, "console", 1)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 't':
- if (!strcmp(optarg, "pv"))
- type = LIBXL_CONSOLE_TYPE_PV;
- else if (!strcmp(optarg, "serial"))
- type = LIBXL_CONSOLE_TYPE_SERIAL;
- else {
- fprintf(stderr, "console type supported are: pv, serial\n");
- return 2;
- }
- break;
- case 'n':
- num = atoi(optarg);
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "n:t:", NULL, "console", 1) {
+ case 0: case 2:
+ return opt;
+ case 't':
+ if (!strcmp(optarg, "pv"))
+ type = LIBXL_CONSOLE_TYPE_PV;
+ else if (!strcmp(optarg, "serial"))
+ type = LIBXL_CONSOLE_TYPE_SERIAL;
+ else {
+ fprintf(stderr, "console type supported are: pv, serial\n");
+ return 2;
+ }
+ break;
+ case 'n':
+ num = atoi(optarg);
+ break;
}
domid = find_domain(argv[optind]);
@@ -2534,14 +2604,12 @@ int main_vncviewer(int argc, char **argv
uint32_t domid;
int opt, autopass = 0;
- while ((opt = def_getopt(argc, argv, "ah", opts, "vncviewer", 1)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'a':
- autopass = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "ah", opts, "vncviewer", 1) {
+ case 0: case 2:
+ return opt;
+ case 'a':
+ autopass = 1;
+ break;
}
domid = find_domain(argv[optind]);
@@ -2574,8 +2642,10 @@ int main_pcilist(int argc, char **argv)
uint32_t domid;
int opt;
- if ((opt = def_getopt(argc, argv, "", NULL, "pci-list", 1)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "pci-list", 1) {
+ case 0: case 2:
return opt;
+ }
domid = find_domain(argv[optind]);
@@ -2613,14 +2683,12 @@ int main_pcidetach(int argc, char **argv
int force = 0;
const char *bdf = NULL;
- while ((opt = def_getopt(argc, argv, "f", NULL, "pci-detach", 2)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'f':
- force = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "f", NULL, "pci-detach", 2) {
+ case 0: case 2:
+ return opt;
+ case 'f':
+ force = 1;
+ break;
}
domid = find_domain(argv[optind]);
@@ -2655,8 +2723,10 @@ int main_pciattach(int argc, char **argv
int opt;
const char *bdf = NULL, *vs = NULL;
- if ((opt = def_getopt(argc, argv, "", NULL, "pci-attach", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "pci-attach", 2) {
+ case 0: case 2:
return opt;
+ }
domid = find_domain(argv[optind]);
bdf = argv[optind + 1];
@@ -2689,8 +2759,10 @@ int main_pciassignable_list(int argc, ch
{
int opt;
- if ((opt = def_getopt(argc, argv, "", NULL, "pci-assignable-list", 0)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "pci-assignable-list", 0) {
+ case 0: case 2:
return opt;
+ }
pciassignable_list();
return 0;
@@ -2721,11 +2793,9 @@ int main_pciassignable_add(int argc, cha
int opt;
const char *bdf = NULL;
- while ((opt = def_getopt(argc, argv, "", NULL, "pci-assignable-add", 1)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- }
+ SWITCH_FOREACH_OPT(opt, "", NULL, "pci-assignable-add", 1) {
+ case 0: case 2:
+ return opt;
}
bdf = argv[optind];
@@ -2760,14 +2830,12 @@ int main_pciassignable_remove(int argc,
const char *bdf = NULL;
int rebind = 0;
- while ((opt = def_getopt(argc, argv, "r", NULL, "pci-assignable-remove", 1)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'r':
- rebind=1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "r", NULL, "pci-assignable-remove", 1) {
+ case 0: case 2:
+ return opt;
+ case 'r':
+ rebind=1;
+ break;
}
bdf = argv[optind];
@@ -3578,34 +3646,31 @@ int main_restore(int argc, char **argv)
{0, 0, 0, 0}
};
- while ((opt = def_getopt(argc, argv, "FhcpdeVA",
- opts, "restore", 1)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'c':
- console_autoconnect = 1;
- break;
- case 'p':
- paused = 1;
- break;
- case 'd':
- debug = 1;
- break;
- case 'F':
- daemonize = 0;
- break;
- case 'e':
- daemonize = 0;
- monitor = 0;
- break;
- case 'V':
- vnc = 1;
- break;
- case 'A':
- vnc = vncautopass = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "FhcpdeVA", opts, "restore", 1) {
+ case 0: case 2:
+ return opt;
+ case 'c':
+ console_autoconnect = 1;
+ break;
+ case 'p':
+ paused = 1;
+ break;
+ case 'd':
+ debug = 1;
+ break;
+ case 'F':
+ daemonize = 0;
+ break;
+ case 'e':
+ daemonize = 0;
+ monitor = 0;
+ break;
+ case 'V':
+ vnc = 1;
+ break;
+ case 'A':
+ vnc = vncautopass = 1;
+ break;
}
if (argc-optind == 1) {
@@ -3642,24 +3707,22 @@ int main_migrate_receive(int argc, char
int debug = 0, daemonize = 1, monitor = 1, remus = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "Fedr", NULL, "migrate-receive", 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'F':
- daemonize = 0;
- break;
- case 'e':
- daemonize = 0;
- monitor = 0;
- break;
- case 'd':
- debug = 1;
- break;
- case 'r':
- remus = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "Fedr", NULL, "migrate-receive", 0) {
+ case 0: case 2:
+ return opt;
+ case 'F':
+ daemonize = 0;
+ break;
+ case 'e':
+ daemonize = 0;
+ monitor = 0;
+ break;
+ case 'd':
+ debug = 1;
+ break;
+ case 'r':
+ remus = 1;
+ break;
}
if (argc-optind != 0) {
@@ -3681,14 +3744,12 @@ int main_save(int argc, char **argv)
int checkpoint = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "c", NULL, "save", 2)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'c':
- checkpoint = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "c", NULL, "save", 2) {
+ case 0: case 2:
+ return opt;
+ case 'c':
+ checkpoint = 1;
+ break;
}
if (argc-optind > 3) {
@@ -3714,27 +3775,25 @@ int main_migrate(int argc, char **argv)
char *host;
int opt, daemonize = 1, monitor = 1, debug = 0;
- while ((opt = def_getopt(argc, argv, "FC:s:ed", NULL, "migrate", 2)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'C':
- config_filename = optarg;
- break;
- case 's':
- ssh_command = optarg;
- break;
- case 'F':
- daemonize = 0;
- break;
- case 'e':
- daemonize = 0;
- monitor = 0;
- break;
- case 'd':
- debug = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "FC:s:ed", NULL, "migrate", 2) {
+ case 0: case 2:
+ return opt;
+ case 'C':
+ config_filename = optarg;
+ break;
+ case 's':
+ ssh_command = optarg;
+ break;
+ case 'F':
+ daemonize = 0;
+ break;
+ case 'e':
+ daemonize = 0;
+ monitor = 0;
+ break;
+ case 'd':
+ debug = 1;
+ break;
}
domid = find_domain(argv[optind]);
@@ -3758,8 +3817,10 @@ int main_dump_core(int argc, char **argv
{
int opt;
- if ((opt = def_getopt(argc, argv, "", NULL, "dump-core", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "dump-core", 2) {
+ case 0: case 2:
return opt;
+ }
core_dump_domain(find_domain(argv[optind]), argv[optind + 1]);
return 0;
@@ -3769,8 +3830,10 @@ int main_pause(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", NULL, "pause", 1)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "pause", 1) {
+ case 0: case 2:
return opt;
+ }
pause_domain(find_domain(argv[optind]));
@@ -3781,8 +3844,10 @@ int main_unpause(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", NULL, "unpause", 1)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "unpause", 1) {
+ case 0: case 2:
return opt;
+ }
unpause_domain(find_domain(argv[optind]));
@@ -3793,8 +3858,10 @@ int main_destroy(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", NULL, "destroy", 1)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "destroy", 1) {
+ case 0: case 2:
return opt;
+ }
destroy_domain(find_domain(argv[optind]));
return 0;
@@ -3816,20 +3883,18 @@ static int main_shutdown_or_reboot(int d
{0, 0, 0, 0}
};
- while ((opt = def_getopt(argc, argv, "awF", opts, what, 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'a':
- all = 1;
- break;
- case 'w':
- wait_for_it = 1;
- break;
- case 'F':
- fallback_trigger = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "awF", opts, what, 0) {
+ case 0: case 2:
+ return opt;
+ case 'a':
+ all = 1;
+ break;
+ case 'w':
+ wait_for_it = 1;
+ break;
+ case 'F':
+ fallback_trigger = 1;
+ break;
}
if (!argv[optind] && !all) {
@@ -3900,23 +3965,18 @@ int main_list(int argc, char **argv)
libxl_dominfo *info, *info_free=0;
int nb_domain, rc;
- while ((opt = def_getopt(argc, argv, "lvhZ", opts, "list", 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'l':
- details = 1;
- break;
- case 'h':
- help("list");
- return 0;
- case 'v':
- verbose = 1;
- break;
- case 'Z':
- context = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "lvhZ", opts, "list", 0) {
+ case 0: case 2:
+ return opt;
+ case 'l':
+ details = 1;
+ break;
+ case 'v':
+ verbose = 1;
+ break;
+ case 'Z':
+ context = 1;
+ break;
}
if (optind >= argc) {
@@ -3962,8 +4022,10 @@ int main_vm_list(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", NULL, "vm-list", 0)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "vm-list", 0) {
+ case 0: case 2:
return opt;
+ }
list_vm();
return 0;
@@ -3993,45 +4055,40 @@ int main_create(int argc, char **argv)
argc--; argv++;
}
- while ((opt = def_getopt(argc, argv, "Fhnqf:pcdeVA", opts, "create", 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'f':
- filename = optarg;
- break;
- case 'p':
- paused = 1;
- break;
- case 'c':
- console_autoconnect = 1;
- break;
- case 'd':
- debug = 1;
- break;
- case 'F':
- daemonize = 0;
- break;
- case 'e':
- daemonize = 0;
- monitor = 0;
- break;
- case 'h':
- help("create");
- return 0;
- case 'n':
- dryrun_only = 1;
- break;
- case 'q':
- quiet = 1;
- break;
- case 'V':
- vnc = 1;
- break;
- case 'A':
- vnc = vncautopass = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "Fhnqf:pcdeVA", opts, "create", 0) {
+ case 0: case 2:
+ return opt;
+ case 'f':
+ filename = optarg;
+ break;
+ case 'p':
+ paused = 1;
+ break;
+ case 'c':
+ console_autoconnect = 1;
+ break;
+ case 'd':
+ debug = 1;
+ break;
+ case 'F':
+ daemonize = 0;
+ break;
+ case 'e':
+ daemonize = 0;
+ monitor = 0;
+ break;
+ case 'n':
+ dryrun_only = 1;
+ break;
+ case 'q':
+ quiet = 1;
+ break;
+ case 'V':
+ vnc = 1;
+ break;
+ case 'A':
+ vnc = vncautopass = 1;
+ break;
}
extra_config[0] = '\0';
@@ -4099,17 +4156,15 @@ int main_config_update(int argc, char **
argc--; argv++;
}
- while ((opt = def_getopt(argc, argv, "dhqf:", opts, "config_update", 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'd':
- debug = 1;
- break;
- case 'f':
- filename = optarg;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "dhqf:", opts, "config_update", 0) {
+ case 0: case 2:
+ return opt;
+ case 'd':
+ debug = 1;
+ break;
+ case 'f':
+ filename = optarg;
+ break;
}
extra_config[0] = '\0';
@@ -4197,8 +4252,11 @@ int main_button_press(int argc, char **a
fprintf(stderr, "WARNING: \"button-press\" is deprecated. "
"Please use \"trigger\"\n");
- if ((opt = def_getopt(argc, argv, "", NULL, "button-press", 2)) != -1)
+
+ SWITCH_FOREACH_OPT(opt, "", NULL, "button-press", 2) {
+ case 0: case 2:
return opt;
+ }
button_press(find_domain(argv[optind]), argv[optind + 1]);
@@ -4338,8 +4396,10 @@ int main_vcpulist(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", NULL, "cpu-list", 0)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "cpu-list", 0) {
+ case 0: case 2:
return opt;
+ }
vcpulist(argc - optind, argv + optind);
return 0;
@@ -4399,8 +4459,10 @@ int main_vcpupin(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", NULL, "vcpu-pin", 3)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "vcpu-pin", 3) {
+ case 0: case 2:
return opt;
+ }
vcpupin(find_domain(argv[optind]), argv[optind+1] , argv[optind+2]);
return 0;
@@ -4435,8 +4497,10 @@ int main_vcpuset(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", NULL, "vcpu-set", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "vcpu-set", 2) {
+ case 0: case 2:
return opt;
+ }
vcpuset(find_domain(argv[optind]), argv[optind+1]);
return 0;
@@ -4618,14 +4682,12 @@ int main_info(int argc, char **argv)
};
int numa = 0;
- while ((opt = def_getopt(argc, argv, "hn", opts, "info", 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'n':
- numa = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "hn", opts, "info", 0) {
+ case 0: case 2:
+ return opt;
+ case 'n':
+ numa = 1;
+ break;
}
print_info(numa);
@@ -4659,8 +4721,10 @@ int main_sharing(int argc, char **argv)
libxl_dominfo *info, *info_free = NULL;
int nb_domain, rc;
- if ((opt = def_getopt(argc, argv, "", NULL, "sharing", 0)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "sharing", 0) {
+ case 0: case 2:
return opt;
+ }
if (optind >= argc) {
info = libxl_list_domain(ctx, &nb_domain);
@@ -4940,36 +5004,34 @@ int main_sched_credit(int argc, char **a
{0, 0, 0, 0}
};
- while ((opt = def_getopt(argc, argv, "d:w:c:p:t:r:hs", opts, "sched-credit", 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'd':
- dom = optarg;
- break;
- case 'w':
- weight = strtol(optarg, NULL, 10);
- opt_w = 1;
- break;
- case 'c':
- cap = strtol(optarg, NULL, 10);
- opt_c = 1;
- break;
- case 't':
- tslice = strtol(optarg, NULL, 10);
- opt_t = 1;
- break;
- case 'r':
- ratelimit = strtol(optarg, NULL, 10);
- opt_r = 1;
- break;
- case 's':
- opt_s = 1;
- break;
- case 'p':
- cpupool = optarg;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "d:w:c:p:t:r:hs", opts, "sched-credit", 0) {
+ case 0: case 2:
+ return opt;
+ case 'd':
+ dom = optarg;
+ break;
+ case 'w':
+ weight = strtol(optarg, NULL, 10);
+ opt_w = 1;
+ break;
+ case 'c':
+ cap = strtol(optarg, NULL, 10);
+ opt_c = 1;
+ break;
+ case 't':
+ tslice = strtol(optarg, NULL, 10);
+ opt_t = 1;
+ break;
+ case 'r':
+ ratelimit = strtol(optarg, NULL, 10);
+ opt_r = 1;
+ break;
+ case 's':
+ opt_s = 1;
+ break;
+ case 'p':
+ cpupool = optarg;
+ break;
}
if ((cpupool || opt_s) && (dom || opt_w || opt_c)) {
@@ -5059,21 +5121,19 @@ int main_sched_credit2(int argc, char **
{0, 0, 0, 0}
};
- while ((opt = def_getopt(argc, argv, "d:w:p:h", opts, "sched-credit2", 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'd':
- dom = optarg;
- break;
- case 'w':
- weight = strtol(optarg, NULL, 10);
- opt_w = 1;
- break;
- case 'p':
- cpupool = optarg;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "d:w:p:h", opts, "sched-credit2", 0) {
+ case 0: case 2:
+ return opt;
+ case 'd':
+ dom = optarg;
+ break;
+ case 'w':
+ weight = strtol(optarg, NULL, 10);
+ opt_w = 1;
+ break;
+ case 'p':
+ cpupool = optarg;
+ break;
}
if (cpupool && (dom || opt_w)) {
@@ -5134,37 +5194,35 @@ int main_sched_sedf(int argc, char **arg
{0, 0, 0, 0}
};
- while ((opt = def_getopt(argc, argv, "d:p:s:l:e:w:c:h", opts, "sched-sedf", 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'd':
- dom = optarg;
- break;
- case 'p':
- period = strtol(optarg, NULL, 10);
- opt_p = 1;
- break;
- case 's':
- slice = strtol(optarg, NULL, 10);
- opt_s = 1;
- break;
- case 'l':
- latency = strtol(optarg, NULL, 10);
- opt_l = 1;
- break;
- case 'e':
- extra = strtol(optarg, NULL, 10);
- opt_e = 1;
- break;
- case 'w':
- weight = strtol(optarg, NULL, 10);
- opt_w = 1;
- break;
- case 'c':
- cpupool = optarg;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "d:p:s:l:e:w:c:h", opts, "sched-sedf", 0) {
+ case 0: case 2:
+ return opt;
+ case 'd':
+ dom = optarg;
+ break;
+ case 'p':
+ period = strtol(optarg, NULL, 10);
+ opt_p = 1;
+ break;
+ case 's':
+ slice = strtol(optarg, NULL, 10);
+ opt_s = 1;
+ break;
+ case 'l':
+ latency = strtol(optarg, NULL, 10);
+ opt_l = 1;
+ break;
+ case 'e':
+ extra = strtol(optarg, NULL, 10);
+ opt_e = 1;
+ break;
+ case 'w':
+ weight = strtol(optarg, NULL, 10);
+ opt_w = 1;
+ break;
+ case 'c':
+ cpupool = optarg;
+ break;
}
if (cpupool && (dom || opt_p || opt_s || opt_l || opt_e || opt_w)) {
@@ -5231,8 +5289,10 @@ int main_domid(int argc, char **argv)
int opt;
const char *domname = NULL;
- if ((opt = def_getopt(argc, argv, "", NULL, "domid", 1)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "domid", 1) {
+ case 0: case 2:
return opt;
+ }
domname = argv[optind];
@@ -5253,8 +5313,10 @@ int main_domname(int argc, char **argv)
char *domname = NULL;
char *endptr = NULL;
- if ((opt = def_getopt(argc, argv, "", NULL, "domname", 1)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "domname", 1) {
+ case 0: case 2:
return opt;
+ }
domid = strtol(argv[optind], &endptr, 10);
if (domid == 0 && !strcmp(endptr, argv[optind])) {
@@ -5281,8 +5343,10 @@ int main_rename(int argc, char **argv)
int opt;
const char *dom, *new_name;
- if ((opt = def_getopt(argc, argv, "", NULL, "rename", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "rename", 2) {
+ case 0: case 2:
return opt;
+ }
dom = argv[optind++];
new_name = argv[optind];
@@ -5305,8 +5369,10 @@ int main_trigger(int argc, char **argv)
const char *trigger_name = NULL;
libxl_trigger trigger;
- if ((opt = def_getopt(argc, argv, "", NULL, "trigger", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "trigger", 2) {
+ case 0: case 2:
return opt;
+ }
domid = find_domain(argv[optind++]);
@@ -5335,8 +5401,10 @@ int main_sysrq(int argc, char **argv)
int opt;
const char *sysrq = NULL;
- if ((opt = def_getopt(argc, argv, "", NULL, "sysrq", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "sysrq", 2) {
+ case 0: case 2:
return opt;
+ }
domid = find_domain(argv[optind++]);
@@ -5358,8 +5426,10 @@ int main_debug_keys(int argc, char **arg
int opt;
char *keys;
- if ((opt = def_getopt(argc, argv, "", NULL, "debug-keys", 1)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "debug-keys", 1) {
+ case 0: case 2:
return opt;
+ }
keys = argv[optind];
@@ -5378,14 +5448,12 @@ int main_dmesg(int argc, char **argv)
char *line;
int opt, ret = 1;
- while ((opt = def_getopt(argc, argv, "c", NULL, "dmesg", 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'c':
- clear = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "c", NULL, "dmesg", 0) {
+ case 0: case 2:
+ return opt;
+ case 'c':
+ clear = 1;
+ break;
}
cr = libxl_xen_console_read_start(ctx, clear);
@@ -5404,8 +5472,10 @@ int main_top(int argc, char **argv)
{
int opt;
- if ((opt = def_getopt(argc, argv, "", NULL, "top", 0)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "top", 0) {
+ case 0: case 2:
return opt;
+ }
return system("xentop");
}
@@ -5421,8 +5491,10 @@ int main_networkattach(int argc, char **
int i;
unsigned int val;
- if ((opt = def_getopt(argc, argv, "", NULL, "network-attach", 1)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "network-attach", 1) {
+ case 0: case 2:
return opt;
+ }
if (argc-optind > 11) {
help("network-attach");
@@ -5508,8 +5580,10 @@ int main_networklist(int argc, char **ar
libxl_nicinfo nicinfo;
int nb, i;
- if ((opt = def_getopt(argc, argv, "", NULL, "network-list", 1)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "network-list", 1) {
+ case 0: case 2:
return opt;
+ }
/* Idx BE MAC Hdl Sta evch txr/rxr BE-path */
printf("%-3s %-2s %-17s %-6s %-5s %-6s %5s/%-5s %-30s\n",
@@ -5545,8 +5619,10 @@ int main_networkdetach(int argc, char **
int opt;
libxl_device_nic nic;
- if ((opt = def_getopt(argc, argv, "", NULL, "network-detach", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "network-detach", 2) {
+ case 0: case 2:
return opt;
+ }
domid = find_domain(argv[optind]);
@@ -5576,8 +5652,10 @@ int main_blockattach(int argc, char **ar
libxl_device_disk disk = { 0 };
XLU_Config *config = 0;
- if ((opt = def_getopt(argc, argv, "", NULL, "block-attach", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "block-attach", 2) {
+ case 0: case 2:
return opt;
+ }
if (domain_qualifier_to_domid(argv[optind], &fe_domid, 0) < 0) {
fprintf(stderr, "%s is an invalid domain identifier\n", argv[optind]);
@@ -5611,8 +5689,10 @@ int main_blocklist(int argc, char **argv
libxl_device_disk *disks;
libxl_diskinfo diskinfo;
- if ((opt = def_getopt(argc, argv, "", NULL, "block-list", 1)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "block-list", 1) {
+ case 0: case 2:
return opt;
+ }
printf("%-5s %-3s %-6s %-5s %-6s %-8s %-30s\n",
"Vdev", "BE", "handle", "state", "evt-ch", "ring-ref", "BE-path");
@@ -5647,8 +5727,10 @@ int main_blockdetach(int argc, char **ar
int opt, rc = 0;
libxl_device_disk disk;
- if ((opt = def_getopt(argc, argv, "", NULL, "block-detach", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "block-detach", 2) {
+ case 0: case 2:
return opt;
+ }
domid = find_domain(argv[optind]);
@@ -5672,8 +5754,10 @@ int main_vtpmattach(int argc, char **arg
unsigned int val;
uint32_t domid;
- if ((opt = def_getopt(argc, argv, "", NULL, "vtpm-attach", 1)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "vtpm-attach", 1) {
+ case 0: case 2:
return opt;
+ }
if (domain_qualifier_to_domid(argv[optind], &domid, 0) < 0) {
fprintf(stderr, "%s is an invalid domain identifier\n", argv[optind]);
@@ -5725,8 +5809,10 @@ int main_vtpmlist(int argc, char **argv)
libxl_vtpminfo vtpminfo;
int nb, i;
- if ((opt = def_getopt(argc, argv, "", NULL, "vtpm-list", 1)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "vtpm-list", 1) {
+ case 0: case 2:
return opt;
+ }
/* Idx BE UUID Hdl Sta evch rref BE-path */
printf("%-3s %-2s %-36s %-6s %-5s %-6s %-5s %-10s\n",
@@ -5765,8 +5851,10 @@ int main_vtpmdetach(int argc, char **arg
libxl_device_vtpm vtpm;
libxl_uuid uuid;
- if ((opt = def_getopt(argc, argv, "", NULL, "vtpm-detach", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "vtpm-detach", 2) {
+ case 0: case 2:
return opt;
+ }
domid = find_domain(argv[optind]);
@@ -5957,14 +6045,12 @@ int main_uptime(int argc, char **argv)
int nb_doms = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "s", NULL, "uptime", 1)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 's':
- short_mode = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "s", NULL, "uptime", 1) {
+ case 0: case 2:
+ return opt;
+ case 's':
+ short_mode = 1;
+ break;
}
for (;(dom = argv[optind]) != NULL; nb_doms++,optind++)
@@ -5984,17 +6070,15 @@ int main_tmem_list(int argc, char **argv
int all = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "al", NULL, "tmem-list", 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'l':
- use_long = 1;
- break;
- case 'a':
- all = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "al", NULL, "tmem-list", 0) {
+ case 0: case 2:
+ return opt;
+ case 'l':
+ use_long = 1;
+ break;
+ case 'a':
+ all = 1;
+ break;
}
dom = argv[optind];
@@ -6025,14 +6109,12 @@ int main_tmem_freeze(int argc, char **ar
int all = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "a", NULL, "tmem-freeze", 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'a':
- all = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "a", NULL, "tmem-freeze", 0) {
+ case 0: case 2:
+ return opt;
+ case 'a':
+ all = 1;
+ break;
}
dom = argv[optind];
@@ -6058,14 +6140,12 @@ int main_tmem_thaw(int argc, char **argv
int all = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "a", NULL, "tmem-thaw", 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'a':
- all = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "a", NULL, "tmem-thaw", 0) {
+ case 0: case 2:
+ return opt;
+ case 'a':
+ all = 1;
+ break;
}
dom = argv[optind];
@@ -6093,26 +6173,24 @@ int main_tmem_set(int argc, char **argv)
int all = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "aw:c:p:", NULL, "tmem-set", 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'a':
- all = 1;
- break;
- case 'w':
- weight = strtol(optarg, NULL, 10);
- opt_w = 1;
- break;
- case 'c':
- cap = strtol(optarg, NULL, 10);
- opt_c = 1;
- break;
- case 'p':
- compress = strtol(optarg, NULL, 10);
- opt_p = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "aw:c:p:", NULL, "tmem-set", 0) {
+ case 0: case 2:
+ return opt;
+ case 'a':
+ all = 1;
+ break;
+ case 'w':
+ weight = strtol(optarg, NULL, 10);
+ opt_w = 1;
+ break;
+ case 'c':
+ cap = strtol(optarg, NULL, 10);
+ opt_c = 1;
+ break;
+ case 'p':
+ compress = strtol(optarg, NULL, 10);
+ opt_p = 1;
+ break;
}
dom = argv[optind];
@@ -6154,20 +6232,18 @@ int main_tmem_shared_auth(int argc, char
int all = 0;
int opt;
- while ((opt = def_getopt(argc, argv, "au:A:", NULL, "tmem-shared-auth", 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'a':
- all = 1;
- break;
- case 'u':
- uuid = optarg;
- break;
- case 'A':
- autharg = optarg;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "au:A:", NULL, "tmem-shared-auth", 0) {
+ case 0: case 2:
+ return opt;
+ case 'a':
+ all = 1;
+ break;
+ case 'u':
+ uuid = optarg;
+ break;
+ case 'A':
+ autharg = optarg;
+ break;
}
dom = argv[optind];
@@ -6204,8 +6280,10 @@ int main_tmem_freeable(int argc, char **
int opt;
int mb;
- if ((opt = def_getopt(argc, argv, "", NULL, "tmem-freeable", 0)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "tmem-freeale", 0) {
+ case 0: case 2:
return opt;
+ }
mb = libxl_tmem_freeable(ctx);
if (mb == -1)
@@ -6244,17 +6322,15 @@ int main_cpupoolcreate(int argc, char **
libxl_cputopology *topology;
int rc = -ERROR_FAIL;
- while ((opt = def_getopt(argc, argv, "hnf:", opts, "cpupool-create", 0)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
- case 'f':
- filename = optarg;
- break;
- case 'n':
- dryrun_only = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "hnf:", opts, "cpupool-create", 0) {
+ case 0: case 2:
+ return opt;
+ case 'f':
+ filename = optarg;
+ break;
+ case 'n':
+ dryrun_only = 1;
+ break;
}
memset(extra_config, 0, sizeof(extra_config));
@@ -6429,14 +6505,12 @@ int main_cpupoollist(int argc, char **ar
char *name;
int ret = 0;
- while ((opt = def_getopt(argc, argv, "hc", opts, "cpupool-list", 1)) != -1) {
- switch (opt) {
- case 0: case 2:
- break;
- case 'c':
- opt_cpus = 1;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "hc", opts, "cpupool-list", 1) {
+ case 0: case 2:
+ break;
+ case 'c':
+ opt_cpus = 1;
+ break;
}
if (optind < argc) {
@@ -6496,8 +6570,10 @@ int main_cpupooldestroy(int argc, char *
const char *pool;
uint32_t poolid;
- if ((opt = def_getopt(argc, argv, "", NULL, "cpupool-destroy", 1)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-destroy", 1) {
+ case 0: case 2:
return opt;
+ }
pool = argv[optind];
@@ -6517,8 +6593,10 @@ int main_cpupoolrename(int argc, char **
const char *new_name;
uint32_t poolid;
- if ((opt = def_getopt(argc, argv, "", NULL, "cpupool-rename", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-rename", 2) {
+ case 0: case 2:
return opt;
+ }
pool = argv[optind++];
@@ -6547,8 +6625,10 @@ int main_cpupoolcpuadd(int argc, char **
int node;
int n;
- if ((opt = def_getopt(argc, argv, "", NULL, "cpupool-cpu-add", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-cpu-add", 2) {
+ case 0: case 2:
return opt;
+ }
pool = argv[optind++];
node = -1;
@@ -6591,8 +6671,10 @@ int main_cpupoolcpuremove(int argc, char
int node;
int n;
- if ((opt = def_getopt(argc, argv, "", NULL, "cpupool-cpu-remove", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-cpu-remove", 2) {
+ case 0: case 2:
return opt;
+ }
pool = argv[optind++];
node = -1;
@@ -6634,8 +6716,10 @@ int main_cpupoolmigrate(int argc, char *
const char *dom;
uint32_t domid;
- if ((opt = def_getopt(argc, argv, "", NULL, "cpupool-migrate", 2)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-migrate", 2) {
+ case 0: case 2:
return opt;
+ }
dom = argv[optind++];
pool = argv[optind];
@@ -6674,8 +6758,11 @@ int main_cpupoolnumasplit(int argc, char
libxl_cputopology *topology;
libxl_dominfo info;
- if ((opt = def_getopt(argc, argv, "", NULL, "cpupool-numa-split", 0)) != -1)
+ SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-numa-split", 0) {
+ case 0: case 2:
return opt;
+ }
+
ret = 0;
poolinfo = libxl_list_cpupool(ctx, &n_pools);
@@ -6927,27 +7014,24 @@ int main_remus(int argc, char **argv)
r_info.blackhole = 0;
r_info.compression = 1;
- while ((opt = def_getopt(argc, argv, "bui:s:e", NULL, "remus", 2)) != -1) {
- switch (opt) {
- case 0: case 2:
- return opt;
-
- case 'i':
- r_info.interval = atoi(optarg);
- break;
- case 'b':
- r_info.blackhole = 1;
- break;
- case 'u':
- r_info.compression = 0;
- break;
- case 's':
- ssh_command = optarg;
- break;
- case 'e':
- daemonize = 0;
- break;
- }
+ SWITCH_FOREACH_OPT(opt, "bui:s:e", NULL, "remus", 2) {
+ case 0: case 2:
+ return opt;
+ case 'i':
+ r_info.interval = atoi(optarg);
+ break;
+ case 'b':
+ r_info.blackhole = 1;
+ break;
+ case 'u':
+ r_info.compression = 0;
+ break;
+ case 's':
+ ssh_command = optarg;
+ break;
+ case 'e':
+ daemonize = 0;
+ break;
}
domid = find_domain(argv[optind]);
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3 of 3 V4] xl: SWITCH_FOREACH_OPT handles special options directly
2013-01-03 11:39 [PATCH 0 of 3 V4] xl: add helpers for option parsing Ian Campbell
2013-01-03 11:39 ` [PATCH 1 of 3 V4] xl: allow def_getopt to handle long options Ian Campbell
2013-01-03 11:39 ` [PATCH 2 of 3 V4] xl: Introduce helper macro for option parsing Ian Campbell
@ 2013-01-03 11:39 ` Ian Campbell
2013-01-03 16:27 ` Ian Campbell
2013-01-24 11:55 ` [PATCH 0 of 3 V4] xl: add helpers for option parsing Ian Campbell
3 siblings, 1 reply; 9+ messages in thread
From: Ian Campbell @ 2013-01-03 11:39 UTC (permalink / raw)
To: xen-devel; +Cc: Ian Jackson
# HG changeset patch
# User Ian Campbell <ijc@hellion.org.uk>
# 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@citrix.com>
--
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)
static int set_memory_max(uint32_t domid, const char *mem)
@@ -2452,8 +2453,7 @@ int main_memmax(int argc, char **argv)
int rc;
SWITCH_FOREACH_OPT(opt, "", NULL, "mem-max", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -2488,8 +2488,7 @@ int main_memset(int argc, char **argv)
const char *mem;
SWITCH_FOREACH_OPT(opt, "", NULL, "mem-set", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -2529,8 +2528,7 @@ int main_cd_eject(int argc, char **argv)
const char *virtdev;
SWITCH_FOREACH_OPT(opt, "", NULL, "cd-eject", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -2548,8 +2546,7 @@ int main_cd_insert(int argc, char **argv
char *file = NULL; /* modified by cd_insert tokenising it */
SWITCH_FOREACH_OPT(opt, "", NULL, "cd-insert", 3) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -2567,8 +2564,6 @@ int main_console(int argc, char **argv)
libxl_console_type type = 0;
SWITCH_FOREACH_OPT(opt, "n:t:", NULL, "console", 1) {
- case 0: case 2:
- return opt;
case 't':
if (!strcmp(optarg, "pv"))
type = LIBXL_CONSOLE_TYPE_PV;
@@ -2605,8 +2600,6 @@ int main_vncviewer(int argc, char **argv
int opt, autopass = 0;
SWITCH_FOREACH_OPT(opt, "ah", opts, "vncviewer", 1) {
- case 0: case 2:
- return opt;
case 'a':
autopass = 1;
break;
@@ -2643,8 +2636,7 @@ int main_pcilist(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "pci-list", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -2684,8 +2676,6 @@ int main_pcidetach(int argc, char **argv
const char *bdf = NULL;
SWITCH_FOREACH_OPT(opt, "f", NULL, "pci-detach", 2) {
- case 0: case 2:
- return opt;
case 'f':
force = 1;
break;
@@ -2724,8 +2714,7 @@ int main_pciattach(int argc, char **argv
const char *bdf = NULL, *vs = NULL;
SWITCH_FOREACH_OPT(opt, "", NULL, "pci-attach", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -2760,8 +2749,7 @@ int main_pciassignable_list(int argc, ch
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "pci-assignable-list", 0) {
- case 0: case 2:
- return opt;
+ /* No options */
}
pciassignable_list();
@@ -2794,8 +2782,7 @@ int main_pciassignable_add(int argc, cha
const char *bdf = NULL;
SWITCH_FOREACH_OPT(opt, "", NULL, "pci-assignable-add", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
bdf = argv[optind];
@@ -2831,8 +2818,6 @@ int main_pciassignable_remove(int argc,
int rebind = 0;
SWITCH_FOREACH_OPT(opt, "r", NULL, "pci-assignable-remove", 1) {
- case 0: case 2:
- return opt;
case 'r':
rebind=1;
break;
@@ -3647,8 +3632,6 @@ int main_restore(int argc, char **argv)
};
SWITCH_FOREACH_OPT(opt, "FhcpdeVA", opts, "restore", 1) {
- case 0: case 2:
- return opt;
case 'c':
console_autoconnect = 1;
break;
@@ -3708,8 +3691,6 @@ int main_migrate_receive(int argc, char
int opt;
SWITCH_FOREACH_OPT(opt, "Fedr", NULL, "migrate-receive", 0) {
- case 0: case 2:
- return opt;
case 'F':
daemonize = 0;
break;
@@ -3745,8 +3726,6 @@ int main_save(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "c", NULL, "save", 2) {
- case 0: case 2:
- return opt;
case 'c':
checkpoint = 1;
break;
@@ -3776,8 +3755,6 @@ int main_migrate(int argc, char **argv)
int opt, daemonize = 1, monitor = 1, debug = 0;
SWITCH_FOREACH_OPT(opt, "FC:s:ed", NULL, "migrate", 2) {
- case 0: case 2:
- return opt;
case 'C':
config_filename = optarg;
break;
@@ -3818,8 +3795,7 @@ int main_dump_core(int argc, char **argv
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "dump-core", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
core_dump_domain(find_domain(argv[optind]), argv[optind + 1]);
@@ -3831,8 +3807,7 @@ int main_pause(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "pause", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
pause_domain(find_domain(argv[optind]));
@@ -3845,8 +3820,7 @@ int main_unpause(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "unpause", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
unpause_domain(find_domain(argv[optind]));
@@ -3859,8 +3833,7 @@ int main_destroy(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "destroy", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
destroy_domain(find_domain(argv[optind]));
@@ -3884,8 +3857,6 @@ static int main_shutdown_or_reboot(int d
};
SWITCH_FOREACH_OPT(opt, "awF", opts, what, 0) {
- case 0: case 2:
- return opt;
case 'a':
all = 1;
break;
@@ -3966,8 +3937,6 @@ int main_list(int argc, char **argv)
int nb_domain, rc;
SWITCH_FOREACH_OPT(opt, "lvhZ", opts, "list", 0) {
- case 0: case 2:
- return opt;
case 'l':
details = 1;
break;
@@ -4023,8 +3992,7 @@ int main_vm_list(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "vm-list", 0) {
- case 0: case 2:
- return opt;
+ /* No options */
}
list_vm();
@@ -4056,8 +4024,6 @@ int main_create(int argc, char **argv)
}
SWITCH_FOREACH_OPT(opt, "Fhnqf:pcdeVA", opts, "create", 0) {
- case 0: case 2:
- return opt;
case 'f':
filename = optarg;
break;
@@ -4157,8 +4123,6 @@ int main_config_update(int argc, char **
}
SWITCH_FOREACH_OPT(opt, "dhqf:", opts, "config_update", 0) {
- case 0: case 2:
- return opt;
case 'd':
debug = 1;
break;
@@ -4254,8 +4218,7 @@ int main_button_press(int argc, char **a
SWITCH_FOREACH_OPT(opt, "", NULL, "button-press", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
button_press(find_domain(argv[optind]), argv[optind + 1]);
@@ -4397,8 +4360,7 @@ int main_vcpulist(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "cpu-list", 0) {
- case 0: case 2:
- return opt;
+ /* No options */
}
vcpulist(argc - optind, argv + optind);
@@ -4460,8 +4422,7 @@ int main_vcpupin(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "vcpu-pin", 3) {
- case 0: case 2:
- return opt;
+ /* No options */
}
vcpupin(find_domain(argv[optind]), argv[optind+1] , argv[optind+2]);
@@ -4498,8 +4459,7 @@ int main_vcpuset(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "vcpu-set", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
vcpuset(find_domain(argv[optind]), argv[optind+1]);
@@ -4683,8 +4643,6 @@ int main_info(int argc, char **argv)
int numa = 0;
SWITCH_FOREACH_OPT(opt, "hn", opts, "info", 0) {
- case 0: case 2:
- return opt;
case 'n':
numa = 1;
break;
@@ -4722,8 +4680,7 @@ int main_sharing(int argc, char **argv)
int nb_domain, rc;
SWITCH_FOREACH_OPT(opt, "", NULL, "sharing", 0) {
- case 0: case 2:
- return opt;
+ /* No options */
}
if (optind >= argc) {
@@ -5005,8 +4962,6 @@ int main_sched_credit(int argc, char **a
};
SWITCH_FOREACH_OPT(opt, "d:w:c:p:t:r:hs", opts, "sched-credit", 0) {
- case 0: case 2:
- return opt;
case 'd':
dom = optarg;
break;
@@ -5122,8 +5077,6 @@ int main_sched_credit2(int argc, char **
};
SWITCH_FOREACH_OPT(opt, "d:w:p:h", opts, "sched-credit2", 0) {
- case 0: case 2:
- return opt;
case 'd':
dom = optarg;
break;
@@ -5195,8 +5148,6 @@ int main_sched_sedf(int argc, char **arg
};
SWITCH_FOREACH_OPT(opt, "d:p:s:l:e:w:c:h", opts, "sched-sedf", 0) {
- case 0: case 2:
- return opt;
case 'd':
dom = optarg;
break;
@@ -5290,8 +5241,7 @@ int main_domid(int argc, char **argv)
const char *domname = NULL;
SWITCH_FOREACH_OPT(opt, "", NULL, "domid", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domname = argv[optind];
@@ -5314,8 +5264,7 @@ int main_domname(int argc, char **argv)
char *endptr = NULL;
SWITCH_FOREACH_OPT(opt, "", NULL, "domname", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = strtol(argv[optind], &endptr, 10);
@@ -5344,8 +5293,7 @@ int main_rename(int argc, char **argv)
const char *dom, *new_name;
SWITCH_FOREACH_OPT(opt, "", NULL, "rename", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
dom = argv[optind++];
@@ -5370,8 +5318,7 @@ int main_trigger(int argc, char **argv)
libxl_trigger trigger;
SWITCH_FOREACH_OPT(opt, "", NULL, "trigger", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind++]);
@@ -5402,8 +5349,7 @@ int main_sysrq(int argc, char **argv)
const char *sysrq = NULL;
SWITCH_FOREACH_OPT(opt, "", NULL, "sysrq", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind++]);
@@ -5427,8 +5373,7 @@ int main_debug_keys(int argc, char **arg
char *keys;
SWITCH_FOREACH_OPT(opt, "", NULL, "debug-keys", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
keys = argv[optind];
@@ -5449,8 +5394,6 @@ int main_dmesg(int argc, char **argv)
int opt, ret = 1;
SWITCH_FOREACH_OPT(opt, "c", NULL, "dmesg", 0) {
- case 0: case 2:
- return opt;
case 'c':
clear = 1;
break;
@@ -5473,8 +5416,7 @@ int main_top(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "top", 0) {
- case 0: case 2:
- return opt;
+ /* No options */
}
return system("xentop");
@@ -5492,8 +5434,7 @@ int main_networkattach(int argc, char **
unsigned int val;
SWITCH_FOREACH_OPT(opt, "", NULL, "network-attach", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
if (argc-optind > 11) {
@@ -5581,8 +5522,7 @@ int main_networklist(int argc, char **ar
int nb, i;
SWITCH_FOREACH_OPT(opt, "", NULL, "network-list", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
/* Idx BE MAC Hdl Sta evch txr/rxr BE-path */
@@ -5620,8 +5560,7 @@ int main_networkdetach(int argc, char **
libxl_device_nic nic;
SWITCH_FOREACH_OPT(opt, "", NULL, "network-detach", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -5653,8 +5592,7 @@ int main_blockattach(int argc, char **ar
XLU_Config *config = 0;
SWITCH_FOREACH_OPT(opt, "", NULL, "block-attach", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
if (domain_qualifier_to_domid(argv[optind], &fe_domid, 0) < 0) {
@@ -5690,8 +5628,7 @@ int main_blocklist(int argc, char **argv
libxl_diskinfo diskinfo;
SWITCH_FOREACH_OPT(opt, "", NULL, "block-list", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
printf("%-5s %-3s %-6s %-5s %-6s %-8s %-30s\n",
@@ -5728,8 +5665,7 @@ int main_blockdetach(int argc, char **ar
libxl_device_disk disk;
SWITCH_FOREACH_OPT(opt, "", NULL, "block-detach", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -5755,8 +5691,7 @@ int main_vtpmattach(int argc, char **arg
uint32_t domid;
SWITCH_FOREACH_OPT(opt, "", NULL, "vtpm-attach", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
if (domain_qualifier_to_domid(argv[optind], &domid, 0) < 0) {
@@ -5810,8 +5745,7 @@ int main_vtpmlist(int argc, char **argv)
int nb, i;
SWITCH_FOREACH_OPT(opt, "", NULL, "vtpm-list", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
/* Idx BE UUID Hdl Sta evch rref BE-path */
@@ -5852,8 +5786,7 @@ int main_vtpmdetach(int argc, char **arg
libxl_uuid uuid;
SWITCH_FOREACH_OPT(opt, "", NULL, "vtpm-detach", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -6046,8 +5979,6 @@ int main_uptime(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "s", NULL, "uptime", 1) {
- case 0: case 2:
- return opt;
case 's':
short_mode = 1;
break;
@@ -6071,8 +6002,6 @@ int main_tmem_list(int argc, char **argv
int opt;
SWITCH_FOREACH_OPT(opt, "al", NULL, "tmem-list", 0) {
- case 0: case 2:
- return opt;
case 'l':
use_long = 1;
break;
@@ -6110,8 +6039,6 @@ int main_tmem_freeze(int argc, char **ar
int opt;
SWITCH_FOREACH_OPT(opt, "a", NULL, "tmem-freeze", 0) {
- case 0: case 2:
- return opt;
case 'a':
all = 1;
break;
@@ -6141,8 +6068,6 @@ int main_tmem_thaw(int argc, char **argv
int opt;
SWITCH_FOREACH_OPT(opt, "a", NULL, "tmem-thaw", 0) {
- case 0: case 2:
- return opt;
case 'a':
all = 1;
break;
@@ -6174,8 +6099,6 @@ int main_tmem_set(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "aw:c:p:", NULL, "tmem-set", 0) {
- case 0: case 2:
- return opt;
case 'a':
all = 1;
break;
@@ -6233,8 +6156,6 @@ int main_tmem_shared_auth(int argc, char
int opt;
SWITCH_FOREACH_OPT(opt, "au:A:", NULL, "tmem-shared-auth", 0) {
- case 0: case 2:
- return opt;
case 'a':
all = 1;
break;
@@ -6281,8 +6202,7 @@ int main_tmem_freeable(int argc, char **
int mb;
SWITCH_FOREACH_OPT(opt, "", NULL, "tmem-freeale", 0) {
- case 0: case 2:
- return opt;
+ /* No options */
}
mb = libxl_tmem_freeable(ctx);
@@ -6323,8 +6243,6 @@ int main_cpupoolcreate(int argc, char **
int rc = -ERROR_FAIL;
SWITCH_FOREACH_OPT(opt, "hnf:", opts, "cpupool-create", 0) {
- case 0: case 2:
- return opt;
case 'f':
filename = optarg;
break;
@@ -6506,8 +6424,6 @@ int main_cpupoollist(int argc, char **ar
int ret = 0;
SWITCH_FOREACH_OPT(opt, "hc", opts, "cpupool-list", 1) {
- case 0: case 2:
- break;
case 'c':
opt_cpus = 1;
break;
@@ -6571,8 +6487,7 @@ int main_cpupooldestroy(int argc, char *
uint32_t poolid;
SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-destroy", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
pool = argv[optind];
@@ -6594,8 +6509,7 @@ int main_cpupoolrename(int argc, char **
uint32_t poolid;
SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-rename", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
pool = argv[optind++];
@@ -6626,8 +6540,7 @@ int main_cpupoolcpuadd(int argc, char **
int n;
SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-cpu-add", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
pool = argv[optind++];
@@ -6672,8 +6585,7 @@ int main_cpupoolcpuremove(int argc, char
int n;
SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-cpu-remove", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
pool = argv[optind++];
@@ -6717,8 +6629,7 @@ int main_cpupoolmigrate(int argc, char *
uint32_t domid;
SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-migrate", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
dom = argv[optind++];
@@ -6759,8 +6670,7 @@ int main_cpupoolnumasplit(int argc, char
libxl_dominfo info;
SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-numa-split", 0) {
- case 0: case 2:
- return opt;
+ /* No options */
}
ret = 0;
@@ -7015,8 +6925,6 @@ int main_remus(int argc, char **argv)
r_info.compression = 1;
SWITCH_FOREACH_OPT(opt, "bui:s:e", NULL, "remus", 2) {
- case 0: case 2:
- return opt;
case 'i':
r_info.interval = atoi(optarg);
break;
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3 of 3 V4] xl: SWITCH_FOREACH_OPT handles special options directly
2013-01-03 11:39 ` [PATCH 3 of 3 V4] xl: SWITCH_FOREACH_OPT handles special options directly Ian Campbell
@ 2013-01-03 16:27 ` Ian Campbell
2013-01-03 16:33 ` Ian Campbell
0 siblings, 1 reply; 9+ messages in thread
From: Ian Campbell @ 2013-01-03 16:27 UTC (permalink / raw)
To: xen-devel@lists.xen.org; +Cc: Ian Jackson
On Thu, 2013-01-03 at 11:39 +0000, Ian Campbell wrote:
> # HG changeset patch
> # User Ian Campbell <ijc@hellion.org.uk>
> # 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@citrix.com>
> --
> 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.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3 of 3 V4] xl: SWITCH_FOREACH_OPT handles special options directly
2013-01-03 16:27 ` Ian Campbell
@ 2013-01-03 16:33 ` Ian Campbell
0 siblings, 0 replies; 9+ messages in thread
From: Ian Campbell @ 2013-01-03 16:33 UTC (permalink / raw)
To: xen-devel@lists.xen.org; +Cc: Ian Jackson
On Thu, 2013-01-03 at 16:27 +0000, Ian Campbell wrote:
> It's obviously a brain fart anyway -- I should push the exits down
> into def_getopt...
V5 of this patch:
8<-------------------
# HG changeset patch
# User Ian Campbell <ijc@hellion.org.uk>
# Date 1357230704 0
# Node ID 7a61269a0c1ab33cc93b47f88d760f0d1f88eaab
# 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@citrix.com>
--
v5: push exit() into def_getopt to avoid infinite loop.
v4: exit() directly instead of returning.
diff -r 1a1a2fa73670 -r 7a61269a0c1a 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 16:31:44 2013 +0000
@@ -2348,13 +2348,13 @@ static int def_getopt(int argc, char * c
while ((opt = getopt_long(argc, argv, optstring, longopts, NULL)) == '?') {
if (optopt == 'h') {
help(helpstr);
- return 0;
+ exit(0);
}
fprintf(stderr, "option `%c' not supported.\n", optopt);
}
if (opt == 'h') {
help(helpstr);
- return 0;
+ exit(0);
}
if (opt != -1)
return opt;
@@ -2363,7 +2363,7 @@ static int def_getopt(int argc, char * c
fprintf(stderr, "'xl %s' requires at least %d argument%s.\n\n",
helpstr, reqargs, reqargs > 1 ? "s" : "");
help(helpstr);
- return 2;
+ exit(2);
}
return -1;
}
@@ -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;
@@ -2452,8 +2451,7 @@ int main_memmax(int argc, char **argv)
int rc;
SWITCH_FOREACH_OPT(opt, "", NULL, "mem-max", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -2488,8 +2486,7 @@ int main_memset(int argc, char **argv)
const char *mem;
SWITCH_FOREACH_OPT(opt, "", NULL, "mem-set", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -2529,8 +2526,7 @@ int main_cd_eject(int argc, char **argv)
const char *virtdev;
SWITCH_FOREACH_OPT(opt, "", NULL, "cd-eject", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -2548,8 +2544,7 @@ int main_cd_insert(int argc, char **argv
char *file = NULL; /* modified by cd_insert tokenising it */
SWITCH_FOREACH_OPT(opt, "", NULL, "cd-insert", 3) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -2567,8 +2562,6 @@ int main_console(int argc, char **argv)
libxl_console_type type = 0;
SWITCH_FOREACH_OPT(opt, "n:t:", NULL, "console", 1) {
- case 0: case 2:
- return opt;
case 't':
if (!strcmp(optarg, "pv"))
type = LIBXL_CONSOLE_TYPE_PV;
@@ -2605,8 +2598,6 @@ int main_vncviewer(int argc, char **argv
int opt, autopass = 0;
SWITCH_FOREACH_OPT(opt, "ah", opts, "vncviewer", 1) {
- case 0: case 2:
- return opt;
case 'a':
autopass = 1;
break;
@@ -2643,8 +2634,7 @@ int main_pcilist(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "pci-list", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -2684,8 +2674,6 @@ int main_pcidetach(int argc, char **argv
const char *bdf = NULL;
SWITCH_FOREACH_OPT(opt, "f", NULL, "pci-detach", 2) {
- case 0: case 2:
- return opt;
case 'f':
force = 1;
break;
@@ -2724,8 +2712,7 @@ int main_pciattach(int argc, char **argv
const char *bdf = NULL, *vs = NULL;
SWITCH_FOREACH_OPT(opt, "", NULL, "pci-attach", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -2760,8 +2747,7 @@ int main_pciassignable_list(int argc, ch
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "pci-assignable-list", 0) {
- case 0: case 2:
- return opt;
+ /* No options */
}
pciassignable_list();
@@ -2794,8 +2780,7 @@ int main_pciassignable_add(int argc, cha
const char *bdf = NULL;
SWITCH_FOREACH_OPT(opt, "", NULL, "pci-assignable-add", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
bdf = argv[optind];
@@ -2831,8 +2816,6 @@ int main_pciassignable_remove(int argc,
int rebind = 0;
SWITCH_FOREACH_OPT(opt, "r", NULL, "pci-assignable-remove", 1) {
- case 0: case 2:
- return opt;
case 'r':
rebind=1;
break;
@@ -3647,8 +3630,6 @@ int main_restore(int argc, char **argv)
};
SWITCH_FOREACH_OPT(opt, "FhcpdeVA", opts, "restore", 1) {
- case 0: case 2:
- return opt;
case 'c':
console_autoconnect = 1;
break;
@@ -3708,8 +3689,6 @@ int main_migrate_receive(int argc, char
int opt;
SWITCH_FOREACH_OPT(opt, "Fedr", NULL, "migrate-receive", 0) {
- case 0: case 2:
- return opt;
case 'F':
daemonize = 0;
break;
@@ -3745,8 +3724,6 @@ int main_save(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "c", NULL, "save", 2) {
- case 0: case 2:
- return opt;
case 'c':
checkpoint = 1;
break;
@@ -3776,8 +3753,6 @@ int main_migrate(int argc, char **argv)
int opt, daemonize = 1, monitor = 1, debug = 0;
SWITCH_FOREACH_OPT(opt, "FC:s:ed", NULL, "migrate", 2) {
- case 0: case 2:
- return opt;
case 'C':
config_filename = optarg;
break;
@@ -3818,8 +3793,7 @@ int main_dump_core(int argc, char **argv
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "dump-core", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
core_dump_domain(find_domain(argv[optind]), argv[optind + 1]);
@@ -3831,8 +3805,7 @@ int main_pause(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "pause", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
pause_domain(find_domain(argv[optind]));
@@ -3845,8 +3818,7 @@ int main_unpause(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "unpause", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
unpause_domain(find_domain(argv[optind]));
@@ -3859,8 +3831,7 @@ int main_destroy(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "destroy", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
destroy_domain(find_domain(argv[optind]));
@@ -3884,8 +3855,6 @@ static int main_shutdown_or_reboot(int d
};
SWITCH_FOREACH_OPT(opt, "awF", opts, what, 0) {
- case 0: case 2:
- return opt;
case 'a':
all = 1;
break;
@@ -3966,8 +3935,6 @@ int main_list(int argc, char **argv)
int nb_domain, rc;
SWITCH_FOREACH_OPT(opt, "lvhZ", opts, "list", 0) {
- case 0: case 2:
- return opt;
case 'l':
details = 1;
break;
@@ -4023,8 +3990,7 @@ int main_vm_list(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "vm-list", 0) {
- case 0: case 2:
- return opt;
+ /* No options */
}
list_vm();
@@ -4056,8 +4022,6 @@ int main_create(int argc, char **argv)
}
SWITCH_FOREACH_OPT(opt, "Fhnqf:pcdeVA", opts, "create", 0) {
- case 0: case 2:
- return opt;
case 'f':
filename = optarg;
break;
@@ -4157,8 +4121,6 @@ int main_config_update(int argc, char **
}
SWITCH_FOREACH_OPT(opt, "dhqf:", opts, "config_update", 0) {
- case 0: case 2:
- return opt;
case 'd':
debug = 1;
break;
@@ -4254,8 +4216,7 @@ int main_button_press(int argc, char **a
SWITCH_FOREACH_OPT(opt, "", NULL, "button-press", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
button_press(find_domain(argv[optind]), argv[optind + 1]);
@@ -4397,8 +4358,7 @@ int main_vcpulist(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "cpu-list", 0) {
- case 0: case 2:
- return opt;
+ /* No options */
}
vcpulist(argc - optind, argv + optind);
@@ -4460,8 +4420,7 @@ int main_vcpupin(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "vcpu-pin", 3) {
- case 0: case 2:
- return opt;
+ /* No options */
}
vcpupin(find_domain(argv[optind]), argv[optind+1] , argv[optind+2]);
@@ -4498,8 +4457,7 @@ int main_vcpuset(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "vcpu-set", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
vcpuset(find_domain(argv[optind]), argv[optind+1]);
@@ -4683,8 +4641,6 @@ int main_info(int argc, char **argv)
int numa = 0;
SWITCH_FOREACH_OPT(opt, "hn", opts, "info", 0) {
- case 0: case 2:
- return opt;
case 'n':
numa = 1;
break;
@@ -4722,8 +4678,7 @@ int main_sharing(int argc, char **argv)
int nb_domain, rc;
SWITCH_FOREACH_OPT(opt, "", NULL, "sharing", 0) {
- case 0: case 2:
- return opt;
+ /* No options */
}
if (optind >= argc) {
@@ -5005,8 +4960,6 @@ int main_sched_credit(int argc, char **a
};
SWITCH_FOREACH_OPT(opt, "d:w:c:p:t:r:hs", opts, "sched-credit", 0) {
- case 0: case 2:
- return opt;
case 'd':
dom = optarg;
break;
@@ -5122,8 +5075,6 @@ int main_sched_credit2(int argc, char **
};
SWITCH_FOREACH_OPT(opt, "d:w:p:h", opts, "sched-credit2", 0) {
- case 0: case 2:
- return opt;
case 'd':
dom = optarg;
break;
@@ -5195,8 +5146,6 @@ int main_sched_sedf(int argc, char **arg
};
SWITCH_FOREACH_OPT(opt, "d:p:s:l:e:w:c:h", opts, "sched-sedf", 0) {
- case 0: case 2:
- return opt;
case 'd':
dom = optarg;
break;
@@ -5290,8 +5239,7 @@ int main_domid(int argc, char **argv)
const char *domname = NULL;
SWITCH_FOREACH_OPT(opt, "", NULL, "domid", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domname = argv[optind];
@@ -5314,8 +5262,7 @@ int main_domname(int argc, char **argv)
char *endptr = NULL;
SWITCH_FOREACH_OPT(opt, "", NULL, "domname", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = strtol(argv[optind], &endptr, 10);
@@ -5344,8 +5291,7 @@ int main_rename(int argc, char **argv)
const char *dom, *new_name;
SWITCH_FOREACH_OPT(opt, "", NULL, "rename", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
dom = argv[optind++];
@@ -5370,8 +5316,7 @@ int main_trigger(int argc, char **argv)
libxl_trigger trigger;
SWITCH_FOREACH_OPT(opt, "", NULL, "trigger", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind++]);
@@ -5402,8 +5347,7 @@ int main_sysrq(int argc, char **argv)
const char *sysrq = NULL;
SWITCH_FOREACH_OPT(opt, "", NULL, "sysrq", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind++]);
@@ -5427,8 +5371,7 @@ int main_debug_keys(int argc, char **arg
char *keys;
SWITCH_FOREACH_OPT(opt, "", NULL, "debug-keys", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
keys = argv[optind];
@@ -5449,8 +5392,6 @@ int main_dmesg(int argc, char **argv)
int opt, ret = 1;
SWITCH_FOREACH_OPT(opt, "c", NULL, "dmesg", 0) {
- case 0: case 2:
- return opt;
case 'c':
clear = 1;
break;
@@ -5473,8 +5414,7 @@ int main_top(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "", NULL, "top", 0) {
- case 0: case 2:
- return opt;
+ /* No options */
}
return system("xentop");
@@ -5492,8 +5432,7 @@ int main_networkattach(int argc, char **
unsigned int val;
SWITCH_FOREACH_OPT(opt, "", NULL, "network-attach", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
if (argc-optind > 11) {
@@ -5581,8 +5520,7 @@ int main_networklist(int argc, char **ar
int nb, i;
SWITCH_FOREACH_OPT(opt, "", NULL, "network-list", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
/* Idx BE MAC Hdl Sta evch txr/rxr BE-path */
@@ -5620,8 +5558,7 @@ int main_networkdetach(int argc, char **
libxl_device_nic nic;
SWITCH_FOREACH_OPT(opt, "", NULL, "network-detach", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -5653,8 +5590,7 @@ int main_blockattach(int argc, char **ar
XLU_Config *config = 0;
SWITCH_FOREACH_OPT(opt, "", NULL, "block-attach", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
if (domain_qualifier_to_domid(argv[optind], &fe_domid, 0) < 0) {
@@ -5690,8 +5626,7 @@ int main_blocklist(int argc, char **argv
libxl_diskinfo diskinfo;
SWITCH_FOREACH_OPT(opt, "", NULL, "block-list", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
printf("%-5s %-3s %-6s %-5s %-6s %-8s %-30s\n",
@@ -5728,8 +5663,7 @@ int main_blockdetach(int argc, char **ar
libxl_device_disk disk;
SWITCH_FOREACH_OPT(opt, "", NULL, "block-detach", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -5755,8 +5689,7 @@ int main_vtpmattach(int argc, char **arg
uint32_t domid;
SWITCH_FOREACH_OPT(opt, "", NULL, "vtpm-attach", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
if (domain_qualifier_to_domid(argv[optind], &domid, 0) < 0) {
@@ -5810,8 +5743,7 @@ int main_vtpmlist(int argc, char **argv)
int nb, i;
SWITCH_FOREACH_OPT(opt, "", NULL, "vtpm-list", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
/* Idx BE UUID Hdl Sta evch rref BE-path */
@@ -5852,8 +5784,7 @@ int main_vtpmdetach(int argc, char **arg
libxl_uuid uuid;
SWITCH_FOREACH_OPT(opt, "", NULL, "vtpm-detach", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
domid = find_domain(argv[optind]);
@@ -6046,8 +5977,6 @@ int main_uptime(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "s", NULL, "uptime", 1) {
- case 0: case 2:
- return opt;
case 's':
short_mode = 1;
break;
@@ -6071,8 +6000,6 @@ int main_tmem_list(int argc, char **argv
int opt;
SWITCH_FOREACH_OPT(opt, "al", NULL, "tmem-list", 0) {
- case 0: case 2:
- return opt;
case 'l':
use_long = 1;
break;
@@ -6110,8 +6037,6 @@ int main_tmem_freeze(int argc, char **ar
int opt;
SWITCH_FOREACH_OPT(opt, "a", NULL, "tmem-freeze", 0) {
- case 0: case 2:
- return opt;
case 'a':
all = 1;
break;
@@ -6141,8 +6066,6 @@ int main_tmem_thaw(int argc, char **argv
int opt;
SWITCH_FOREACH_OPT(opt, "a", NULL, "tmem-thaw", 0) {
- case 0: case 2:
- return opt;
case 'a':
all = 1;
break;
@@ -6174,8 +6097,6 @@ int main_tmem_set(int argc, char **argv)
int opt;
SWITCH_FOREACH_OPT(opt, "aw:c:p:", NULL, "tmem-set", 0) {
- case 0: case 2:
- return opt;
case 'a':
all = 1;
break;
@@ -6233,8 +6154,6 @@ int main_tmem_shared_auth(int argc, char
int opt;
SWITCH_FOREACH_OPT(opt, "au:A:", NULL, "tmem-shared-auth", 0) {
- case 0: case 2:
- return opt;
case 'a':
all = 1;
break;
@@ -6281,8 +6200,7 @@ int main_tmem_freeable(int argc, char **
int mb;
SWITCH_FOREACH_OPT(opt, "", NULL, "tmem-freeale", 0) {
- case 0: case 2:
- return opt;
+ /* No options */
}
mb = libxl_tmem_freeable(ctx);
@@ -6323,8 +6241,6 @@ int main_cpupoolcreate(int argc, char **
int rc = -ERROR_FAIL;
SWITCH_FOREACH_OPT(opt, "hnf:", opts, "cpupool-create", 0) {
- case 0: case 2:
- return opt;
case 'f':
filename = optarg;
break;
@@ -6506,8 +6422,6 @@ int main_cpupoollist(int argc, char **ar
int ret = 0;
SWITCH_FOREACH_OPT(opt, "hc", opts, "cpupool-list", 1) {
- case 0: case 2:
- break;
case 'c':
opt_cpus = 1;
break;
@@ -6571,8 +6485,7 @@ int main_cpupooldestroy(int argc, char *
uint32_t poolid;
SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-destroy", 1) {
- case 0: case 2:
- return opt;
+ /* No options */
}
pool = argv[optind];
@@ -6594,8 +6507,7 @@ int main_cpupoolrename(int argc, char **
uint32_t poolid;
SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-rename", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
pool = argv[optind++];
@@ -6626,8 +6538,7 @@ int main_cpupoolcpuadd(int argc, char **
int n;
SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-cpu-add", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
pool = argv[optind++];
@@ -6672,8 +6583,7 @@ int main_cpupoolcpuremove(int argc, char
int n;
SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-cpu-remove", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
pool = argv[optind++];
@@ -6717,8 +6627,7 @@ int main_cpupoolmigrate(int argc, char *
uint32_t domid;
SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-migrate", 2) {
- case 0: case 2:
- return opt;
+ /* No options */
}
dom = argv[optind++];
@@ -6759,8 +6668,7 @@ int main_cpupoolnumasplit(int argc, char
libxl_dominfo info;
SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-numa-split", 0) {
- case 0: case 2:
- return opt;
+ /* No options */
}
ret = 0;
@@ -7015,8 +6923,6 @@ int main_remus(int argc, char **argv)
r_info.compression = 1;
SWITCH_FOREACH_OPT(opt, "bui:s:e", NULL, "remus", 2) {
- case 0: case 2:
- return opt;
case 'i':
r_info.interval = atoi(optarg);
break;
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0 of 3 V4] xl: add helpers for option parsing
2013-01-03 11:39 [PATCH 0 of 3 V4] xl: add helpers for option parsing Ian Campbell
` (2 preceding siblings ...)
2013-01-03 11:39 ` [PATCH 3 of 3 V4] xl: SWITCH_FOREACH_OPT handles special options directly Ian Campbell
@ 2013-01-24 11:55 ` Ian Campbell
2013-01-24 12:07 ` Ian Jackson
3 siblings, 1 reply; 9+ messages in thread
From: Ian Campbell @ 2013-01-24 11:55 UTC (permalink / raw)
To: xen-devel@lists.xen.org; +Cc: Ian Jackson
ping? The first is acked but the 2nd and 3rd remain not.
On Thu, 2013-01-03 at 11:39 +0000, Ian Campbell wrote:
> This is a repost of the last two patches of "xl shutdown compatibility
> with xm" which were actually helpers for xl option parsing.
>
> I've addressed Ian J's review comments on the second patch and rebased.
>
> I've added a third patch which makes the macro handle the 0 and 2
> cases internally. In this new series this now exits directly instead
> of returning.
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0 of 3 V4] xl: add helpers for option parsing
2013-01-24 11:55 ` [PATCH 0 of 3 V4] xl: add helpers for option parsing Ian Campbell
@ 2013-01-24 12:07 ` Ian Jackson
2013-01-25 10:03 ` Ian Campbell
0 siblings, 1 reply; 9+ messages in thread
From: Ian Jackson @ 2013-01-24 12:07 UTC (permalink / raw)
To: Ian Campbell; +Cc: xen-devel@lists.xen.org
Ian Campbell writes ("Re: [Xen-devel] [PATCH 0 of 3 V4] xl: add helpers for option parsing"):
> ping? The first is acked but the 2nd and 3rd remain not.
I wouldn't have structured the series like this but you can have my
ack for both of them provided you actualy apply all three. (Normally
I think acking a series would indicate approval of all initial
subsets...)
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Ian.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0 of 3 V4] xl: add helpers for option parsing
2013-01-24 12:07 ` Ian Jackson
@ 2013-01-25 10:03 ` Ian Campbell
0 siblings, 0 replies; 9+ messages in thread
From: Ian Campbell @ 2013-01-25 10:03 UTC (permalink / raw)
To: Ian Jackson; +Cc: xen-devel@lists.xen.org
On Thu, 2013-01-24 at 12:07 +0000, Ian Jackson wrote:
> Ian Campbell writes ("Re: [Xen-devel] [PATCH 0 of 3 V4] xl: add helpers for option parsing"):
> > ping? The first is acked but the 2nd and 3rd remain not.
>
> I wouldn't have structured the series like this but you can have my
> ack for both of them provided you actualy apply all three. (Normally
> I think acking a series would indicate approval of all initial
> subsets...)
>
> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Applied, thanks.
>
> Ian.
^ permalink raw reply [flat|nested] 9+ messages in thread