kvmctl does its own parsing of argc/argv. Other than being hard to maintain, the recent --smp addition seems to have broken -32. This patch switches kvmctl to use getopt(). This changes the -32 option to --protected-mode (or -p).
This patch also adds a --help option. Signed-off-by: Anthony Liguori <[EMAIL PROTECTED]> diff --git a/user/main.c b/user/main.c index 804d5f0..ef7d488 100644 --- a/user/main.c +++ b/user/main.c @@ -14,6 +14,8 @@ * This work is licensed under the GNU LGPL license, version 2. */ +#define _GNU_SOURCE + #include "kvmctl.h" #include "test/apic.h" @@ -30,6 +32,8 @@ #include <pthread.h> #include <sys/syscall.h> #include <linux/unistd.h> +#include <getopt.h> +#include <stdbool.h> static int gettid(void) { @@ -313,21 +317,18 @@ static void start_vcpu(int n) pthread_create(&thread, NULL, do_create_vcpu, (void *)(long)n); } -const char *progname; - -static void usage() -{ - fprintf(stderr, "usage: %s [--smp n] [bootstrap] flatfile\n", progname); - exit(1); -} - -static int isarg(const char *arg, const char *longform, const char *shortform) +static void usage(const char *progname) { - if (longform && strcmp(arg, longform) == 0) - return 1; - if (shortform && strcmp(arg, shortform) == 0) - return 1; - return 0; + fprintf(stderr, + "Usage: %s [OPTIONS] [bootstrap] flatfile\n" + "KVM test harness.\n" + "\n" + " -s, --smp=NUM create a VM with NUM virtual CPUs\n" + " -p, --protected-mode start VM in protected mode\n" + " -h, --help display this help screen and exit\n" + "\n" + "Report bugs to <kvm-devel@lists.sourceforge.net>.\n" + , progname); } static void sig_ignore(int sig) @@ -335,25 +336,50 @@ static void sig_ignore(int sig) write(1, "boo\n", 4); } -int main(int ac, char **av) +int main(int argc, char **argv) { void *vm_mem; int i; - - progname = av[0]; - while (ac > 1 && av[1][0] =='-') { - if (isarg(av[1], "--smp", "-s")) { - if (ac <= 2) - usage(); - ncpus = atoi(av[2]); - if (ncpus < 1) - usage(); - ++av, --ac; - } else - usage(); - ++av, --ac; + const char *sopts = "s:ph"; + struct option lopts[] = { + { "smp", 1, 0, 's' }, + { "protected-mode", 0, 0, 'p' }, + { "help", 0, 0, 'h' }, + { 0 }, + }; + int opt_ind, ch; + bool enter_protected_mode = false; + int nb_args; + + while ((ch = getopt_long(argc, argv, sopts, lopts, &opt_ind)) != -1) { + switch (ch) { + case 's': + ncpus = atoi(optarg); + break; + case 'p': + enter_protected_mode = true; + break; + case 'h': + usage(argv[0]); + exit(0); + case '?': + default: + fprintf(stderr, + "Try `%s --help' for more information.\n", + argv[0]); + exit(1); + } } + nb_args = argc - optind; + if (nb_args < 1 || nb_args > 2) { + fprintf(stderr, + "Incorrect number of arguments.\n" + "Try `%s --help' for more information.\n", + argv[0]); + exit(1); + } + signal(IPI_SIGNAL, sig_ignore); vcpus = calloc(ncpus, sizeof *vcpus); @@ -372,14 +398,14 @@ int main(int ac, char **av) fprintf(stderr, "kvm_create failed\n"); return 1; } - if (ac > 1) { - if (strcmp(av[1], "-32") != 0) - load_file(vm_mem + 0xf0000, av[1]); - else - enter_32(kvm); - } - if (ac > 2) - load_file(vm_mem + 0x100000, av[2]); + + if (enter_protected_mode) + enter_32(kvm); + else + load_file(vm_mem + 0xf0000, argv[optind]); + + if (nb_args > 1) + load_file(vm_mem + 0x100000, argv[optind + 1]); sem_init(&init_sem, 0, 0); init_vcpu(0); ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel