diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2010-05-04 11:28:06 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2010-05-04 11:28:06 +0100 |
commit | 0618421fbdb17f5d2c43c547389e388038264777 (patch) | |
tree | 76a6a281d928650ba4a964d97a9cc2e6cc719909 /tools/libxl/xl.c | |
parent | 52efdec3eaae92b2a2f46e2ff911e6da5eaa03f9 (diff) | |
download | xen-0618421fbdb17f5d2c43c547389e388038264777.tar.gz xen-0618421fbdb17f5d2c43c547389e388038264777.tar.bz2 xen-0618421fbdb17f5d2c43c547389e388038264777.zip |
xl: Use command table to store command name and implementation
Signed-off-by: Yang Hongyang <yanghy@cn.fujitsu.com>
Diffstat (limited to 'tools/libxl/xl.c')
-rw-r--r-- | tools/libxl/xl.c | 74 |
1 files changed, 19 insertions, 55 deletions
diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c index 1348e3a243..248e5e4bab 100644 --- a/tools/libxl/xl.c +++ b/tools/libxl/xl.c @@ -29,6 +29,7 @@ #include "libxl.h" #include "xl_cmdimpl.h" +#include "xl_cmdtable.h" extern struct libxl_ctx ctx; extern int logfile; @@ -43,6 +44,8 @@ void log_callback(void *userdata, int loglevel, const char *file, int line, cons int main(int argc, char **argv) { + int i; + if (argc < 2) { help(NULL); exit(1); @@ -59,60 +62,21 @@ int main(int argc, char **argv) srand(time(0)); - if (!strcmp(argv[1], "create")) { - main_create(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "list")) { - main_list(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "list-vm")) { - main_list_vm(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "destroy")) { - main_destroy(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "pci-attach")) { - main_pciattach(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "pci-detach")) { - main_pcidetach(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "pci-list")) { - main_pcilist(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "pause")) { - main_pause(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "unpause")) { - main_unpause(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "console")) { - main_console(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "save")) { - main_save(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "migrate")) { - main_migrate(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "restore")) { - main_restore(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "migrate-receive")) { - main_migrate_receive(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "cd-insert")) { - main_cd_insert(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "cd-eject")) { - main_cd_eject(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "mem-set")) { - main_memset(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "button-press")) { - main_button_press(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "vcpu-list")) { - main_vcpulist(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "vcpu-pin")) { - main_vcpupin(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "vcpu-set")) { - main_vcpuset(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "info")) { - main_info(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "sched-credit")) { - main_sched_credit(argc - 1, argv + 1); - } else if (!strcmp(argv[1], "help")) { - if (argc > 2) - help(argv[2]); - else - help(NULL); - exit(0); - } else { - fprintf(stderr, "command not implemented\n"); - exit(1); + for (i = 0; i < cmdtable_len; i++) { + if (!strcmp(argv[1], cmd_table[i].cmd_name)) + cmd_table[i].cmd_impl(argc - 1, argv + 1); + } + + if (i >= cmdtable_len) { + if (!strcmp(argv[1], "help")) { + if (argc > 2) + help(argv[2]); + else + help(NULL); + exit(0); + } else { + fprintf(stderr, "command not implemented\n"); + exit(1); + } } } |