[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 2 of 2] xl: Introduce helper macro for option parsing



ping?

On Fri, 2012-11-30 at 11:21 +0000, Ian Campbell wrote:
> # HG changeset patch
> # User Ian Campbell <ijc@xxxxxxxxxxxxxx>
> # Date 1354274264 0
> # Node ID d4cc790b47d8735ae3f2b0c4707bfa58f90a2cd3
> # Parent  b63fbacd5037e79bc4f40429453cb59816f94793
> xl: Introduce helper macro for option parsing.
> 
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> ---
> v2:
> - s/FOREACH_OPT/SWITCH_FOREACH_OPT/
> - Document the macro
> 
> diff -r b63fbacd5037 -r d4cc790b47d8 tools/libxl/xl_cmdimpl.c
> --- a/tools/libxl/xl_cmdimpl.c  Fri Nov 30 11:17:44 2012 +0000
> +++ b/tools/libxl/xl_cmdimpl.c  Fri Nov 30 11:17:44 2012 +0000
> @@ -2297,6 +2297,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,
> @@ -2335,6 +2339,57 @@ static int def_getopt(int argc, char * c
>      return -1;
>  }
> 
> +/*
> + * Wraps def_getopt into a convenient loop+switch to process all arguments.
> + *
> + * _opt:        an int variable, holds the current option during processing.
> + * _opts:       short options, as per getopt_long(3)'s optstring argument.
> + * _lopts:      long options, as per getopt_long(3)'s longopts argument. May
> + *              be null.
> + * _help:       name of this command, for usage string.
> + * _req:        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 return 0.
> + *  2 -- generated if the user does not provided _req non-option arguments,
> + *       caller should 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, _lopts, _help, _req)    \
> +    while (((_opt) = def_getopt(argc, argv, (_opts), (_lopts),  \
> +                                (_help), (_req))) != -1)        \
> +        switch (opt)
> +
>  static int set_memory_max(uint32_t domid, const char *mem)
>  {
>      int64_t memorykb;
> @@ -2358,8 +2413,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];
> @@ -2392,8 +2449,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];
> @@ -2431,8 +2490,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];
> @@ -2448,8 +2509,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];
> @@ -2465,24 +2528,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]);
> @@ -2505,14 +2566,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]);
> @@ -2545,8 +2604,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]);
> 
> @@ -2584,14 +2645,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]);
> @@ -2626,8 +2685,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];
> @@ -2660,8 +2721,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;
> @@ -2692,11 +2755,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];
> @@ -2731,14 +2792,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];
> @@ -3549,34 +3608,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) {
> @@ -3613,24 +3669,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) {
> @@ -3652,14 +3706,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) {
> @@ -3685,27 +3737,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]);
> @@ -3729,8 +3779,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;
> @@ -3740,8 +3792,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]));
> 
> @@ -3752,8 +3806,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]));
> 
> @@ -3764,8 +3820,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;
> @@ -3787,20 +3845,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) {
> @@ -3871,23 +3927,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) {
> @@ -3933,8 +3984,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;
> @@ -3964,45 +4017,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';
> @@ -4070,17 +4118,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';
> @@ -4168,8 +4214,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]);
> 
> @@ -4309,8 +4358,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;
> @@ -4370,8 +4421,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;
> @@ -4406,8 +4459,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;
> @@ -4589,14 +4644,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);
> @@ -4630,8 +4683,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);
> @@ -4911,36 +4966,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)) {
> @@ -5030,21 +5083,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)) {
> @@ -5105,37 +5156,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)) {
> @@ -5202,8 +5251,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];
> 
> @@ -5224,8 +5275,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])) {
> @@ -5252,8 +5305,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];
> @@ -5276,8 +5331,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++]);
> 
> @@ -5306,8 +5363,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++]);
> 
> @@ -5329,8 +5388,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];
> 
> @@ -5349,14 +5410,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);
> @@ -5375,8 +5434,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");
>  }
> @@ -5392,8 +5453,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");
> @@ -5479,8 +5542,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",
> @@ -5516,8 +5581,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]);
> 
> @@ -5547,8 +5614,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]);
> @@ -5582,8 +5651,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");
> @@ -5618,8 +5689,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]);
> 
> @@ -5643,8 +5716,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]);
> @@ -5696,8 +5771,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",
> @@ -5736,8 +5813,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]);
> 
> @@ -5928,14 +6007,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++)
> @@ -5955,17 +6032,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];
> @@ -5996,14 +6071,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];
> @@ -6029,14 +6102,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];
> @@ -6064,26 +6135,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];
> @@ -6125,20 +6194,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];
> @@ -6175,8 +6242,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)
> @@ -6215,17 +6284,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));
> @@ -6400,14 +6467,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) {
> @@ -6467,8 +6532,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];
> 
> @@ -6488,8 +6555,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++];
> 
> @@ -6518,8 +6587,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;
> @@ -6562,8 +6633,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;
> @@ -6605,8 +6678,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];
> @@ -6645,8 +6720,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);
> @@ -6898,27 +6976,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]);
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.