[Qemu-devel] [PATCH] watchdog: Export watchdog actions list.
Also, use it instead of using hard-coded values. Signed-off-by: Hani Benhabiles h...@linux.com --- Should have been part of the last monitor completion series, but better late then never. :) hw/watchdog/watchdog.c| 35 +++ include/sysemu/watchdog.h | 6 ++ monitor.c | 19 --- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/hw/watchdog/watchdog.c b/hw/watchdog/watchdog.c index f28161b..3bea6fe 100644 --- a/hw/watchdog/watchdog.c +++ b/hw/watchdog/watchdog.c @@ -39,6 +39,16 @@ static int watchdog_action = WDT_RESET; static QLIST_HEAD(watchdog_list, WatchdogTimerModel) watchdog_list; +struct watchdog_action watchdog_actions[] = { +{ reset, WDT_RESET }, +{ shutdown, WDT_SHUTDOWN }, +{ poweroff, WDT_POWEROFF }, +{ pause, WDT_PAUSE }, +{ debug, WDT_DEBUG }, +{ none, WDT_NONE }, +{ NULL, 0 }, +}; + void watchdog_add_model(WatchdogTimerModel *model) { QLIST_INSERT_HEAD(watchdog_list, model, entry); @@ -83,22 +93,15 @@ int select_watchdog(const char *p) int select_watchdog_action(const char *p) { -if (strcasecmp(p, reset) == 0) -watchdog_action = WDT_RESET; -else if (strcasecmp(p, shutdown) == 0) -watchdog_action = WDT_SHUTDOWN; -else if (strcasecmp(p, poweroff) == 0) -watchdog_action = WDT_POWEROFF; -else if (strcasecmp(p, pause) == 0) -watchdog_action = WDT_PAUSE; -else if (strcasecmp(p, debug) == 0) -watchdog_action = WDT_DEBUG; -else if (strcasecmp(p, none) == 0) -watchdog_action = WDT_NONE; -else -return -1; - -return 0; +int i; + +for (i = 0; watchdog_actions[i].name; i++) { +if (!strcasecmp(p, watchdog_actions[i].name)) { +watchdog_action = watchdog_actions[i].action; +return 0; +} +} +return -1; } static void watchdog_mon_event(const char *action) diff --git a/include/sysemu/watchdog.h b/include/sysemu/watchdog.h index 3e9a970..2bfe2fc 100644 --- a/include/sysemu/watchdog.h +++ b/include/sysemu/watchdog.h @@ -34,6 +34,12 @@ struct WatchdogTimerModel { }; typedef struct WatchdogTimerModel WatchdogTimerModel; +struct watchdog_action { +const char *name; +int action; +}; +extern struct watchdog_action watchdog_actions[]; + /* in hw/watchdog.c */ int select_watchdog(const char *p); int select_watchdog_action(const char *action); diff --git a/monitor.c b/monitor.c index ee9390f..57d23c6 100644 --- a/monitor.c +++ b/monitor.c @@ -4562,16 +4562,21 @@ void netdev_del_completion(ReadLineState *rs, int nb_args, const char *str) void watchdog_action_completion(ReadLineState *rs, int nb_args, const char *str) { +int i; +size_t len; + if (nb_args != 2) { return; } -readline_set_completion_index(rs, strlen(str)); -add_completion_option(rs, str, reset); -add_completion_option(rs, str, shutdown); -add_completion_option(rs, str, poweroff); -add_completion_option(rs, str, pause); -add_completion_option(rs, str, debug); -add_completion_option(rs, str, none); +len = strlen(str); +readline_set_completion_index(rs, len); +for (i = 0; watchdog_actions[i].name; i++) { +const char *name = watchdog_actions[i].name; + +if (!strncmp(str, name, len)) { +readline_add_completion(rs, name); +} +} } void migrate_set_capability_completion(ReadLineState *rs, int nb_args, -- 1.8.3.2
Re: [Qemu-devel] [PATCH] watchdog: Export watchdog actions list.
Il 15/06/2014 12:03, Hani Benhabiles ha scritto: Also, use it instead of using hard-coded values. Signed-off-by: Hani Benhabiles h...@linux.com --- Should have been part of the last monitor completion series, but better late then never. :) hw/watchdog/watchdog.c| 35 +++ include/sysemu/watchdog.h | 6 ++ monitor.c | 19 --- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/hw/watchdog/watchdog.c b/hw/watchdog/watchdog.c index f28161b..3bea6fe 100644 --- a/hw/watchdog/watchdog.c +++ b/hw/watchdog/watchdog.c @@ -39,6 +39,16 @@ static int watchdog_action = WDT_RESET; static QLIST_HEAD(watchdog_list, WatchdogTimerModel) watchdog_list; +struct watchdog_action watchdog_actions[] = { +{ reset, WDT_RESET }, +{ shutdown, WDT_SHUTDOWN }, +{ poweroff, WDT_POWEROFF }, +{ pause, WDT_PAUSE }, +{ debug, WDT_DEBUG }, +{ none, WDT_NONE }, +{ NULL, 0 }, +}; The QAPI event series instead used a QAPI enum and renamed this to something like WATCHDOG_ACTION_{RESET,SHUTDOWN,...} at the same time. I guess we can wait for those patches to go in. Paolo void watchdog_add_model(WatchdogTimerModel *model) { QLIST_INSERT_HEAD(watchdog_list, model, entry); @@ -83,22 +93,15 @@ int select_watchdog(const char *p) int select_watchdog_action(const char *p) { -if (strcasecmp(p, reset) == 0) -watchdog_action = WDT_RESET; -else if (strcasecmp(p, shutdown) == 0) -watchdog_action = WDT_SHUTDOWN; -else if (strcasecmp(p, poweroff) == 0) -watchdog_action = WDT_POWEROFF; -else if (strcasecmp(p, pause) == 0) -watchdog_action = WDT_PAUSE; -else if (strcasecmp(p, debug) == 0) -watchdog_action = WDT_DEBUG; -else if (strcasecmp(p, none) == 0) -watchdog_action = WDT_NONE; -else -return -1; - -return 0; +int i; + +for (i = 0; watchdog_actions[i].name; i++) { +if (!strcasecmp(p, watchdog_actions[i].name)) { +watchdog_action = watchdog_actions[i].action; +return 0; +} +} +return -1; } static void watchdog_mon_event(const char *action) diff --git a/include/sysemu/watchdog.h b/include/sysemu/watchdog.h index 3e9a970..2bfe2fc 100644 --- a/include/sysemu/watchdog.h +++ b/include/sysemu/watchdog.h @@ -34,6 +34,12 @@ struct WatchdogTimerModel { }; typedef struct WatchdogTimerModel WatchdogTimerModel; +struct watchdog_action { +const char *name; +int action; +}; +extern struct watchdog_action watchdog_actions[]; + /* in hw/watchdog.c */ int select_watchdog(const char *p); int select_watchdog_action(const char *action); diff --git a/monitor.c b/monitor.c index ee9390f..57d23c6 100644 --- a/monitor.c +++ b/monitor.c @@ -4562,16 +4562,21 @@ void netdev_del_completion(ReadLineState *rs, int nb_args, const char *str) void watchdog_action_completion(ReadLineState *rs, int nb_args, const char *str) { +int i; +size_t len; + if (nb_args != 2) { return; } -readline_set_completion_index(rs, strlen(str)); -add_completion_option(rs, str, reset); -add_completion_option(rs, str, shutdown); -add_completion_option(rs, str, poweroff); -add_completion_option(rs, str, pause); -add_completion_option(rs, str, debug); -add_completion_option(rs, str, none); +len = strlen(str); +readline_set_completion_index(rs, len); +for (i = 0; watchdog_actions[i].name; i++) { +const char *name = watchdog_actions[i].name; + +if (!strncmp(str, name, len)) { +readline_add_completion(rs, name); +} +} } void migrate_set_capability_completion(ReadLineState *rs, int nb_args,
Re: [Qemu-devel] [PATCH] watchdog: Export watchdog actions list.
On Sun, Jun 15, 2014 at 03:57:46PM +0200, Paolo Bonzini wrote: Il 15/06/2014 12:03, Hani Benhabiles ha scritto: Also, use it instead of using hard-coded values. Signed-off-by: Hani Benhabiles h...@linux.com --- Should have been part of the last monitor completion series, but better late then never. :) hw/watchdog/watchdog.c| 35 +++ include/sysemu/watchdog.h | 6 ++ monitor.c | 19 --- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/hw/watchdog/watchdog.c b/hw/watchdog/watchdog.c index f28161b..3bea6fe 100644 --- a/hw/watchdog/watchdog.c +++ b/hw/watchdog/watchdog.c @@ -39,6 +39,16 @@ static int watchdog_action = WDT_RESET; static QLIST_HEAD(watchdog_list, WatchdogTimerModel) watchdog_list; +struct watchdog_action watchdog_actions[] = { +{ reset, WDT_RESET }, +{ shutdown, WDT_SHUTDOWN }, +{ poweroff, WDT_POWEROFF }, +{ pause, WDT_PAUSE }, +{ debug, WDT_DEBUG }, +{ none, WDT_NONE }, +{ NULL, 0 }, +}; The QAPI event series instead used a QAPI enum and renamed this to something like WATCHDOG_ACTION_{RESET,SHUTDOWN,...} at the same time. I guess we can wait for those patches to go in. Sounds alright to me. Will wait for them. Paolo void watchdog_add_model(WatchdogTimerModel *model) { QLIST_INSERT_HEAD(watchdog_list, model, entry); @@ -83,22 +93,15 @@ int select_watchdog(const char *p) int select_watchdog_action(const char *p) { -if (strcasecmp(p, reset) == 0) -watchdog_action = WDT_RESET; -else if (strcasecmp(p, shutdown) == 0) -watchdog_action = WDT_SHUTDOWN; -else if (strcasecmp(p, poweroff) == 0) -watchdog_action = WDT_POWEROFF; -else if (strcasecmp(p, pause) == 0) -watchdog_action = WDT_PAUSE; -else if (strcasecmp(p, debug) == 0) -watchdog_action = WDT_DEBUG; -else if (strcasecmp(p, none) == 0) -watchdog_action = WDT_NONE; -else -return -1; - -return 0; +int i; + +for (i = 0; watchdog_actions[i].name; i++) { +if (!strcasecmp(p, watchdog_actions[i].name)) { +watchdog_action = watchdog_actions[i].action; +return 0; +} +} +return -1; } static void watchdog_mon_event(const char *action) diff --git a/include/sysemu/watchdog.h b/include/sysemu/watchdog.h index 3e9a970..2bfe2fc 100644 --- a/include/sysemu/watchdog.h +++ b/include/sysemu/watchdog.h @@ -34,6 +34,12 @@ struct WatchdogTimerModel { }; typedef struct WatchdogTimerModel WatchdogTimerModel; +struct watchdog_action { +const char *name; +int action; +}; +extern struct watchdog_action watchdog_actions[]; + /* in hw/watchdog.c */ int select_watchdog(const char *p); int select_watchdog_action(const char *action); diff --git a/monitor.c b/monitor.c index ee9390f..57d23c6 100644 --- a/monitor.c +++ b/monitor.c @@ -4562,16 +4562,21 @@ void netdev_del_completion(ReadLineState *rs, int nb_args, const char *str) void watchdog_action_completion(ReadLineState *rs, int nb_args, const char *str) { +int i; +size_t len; + if (nb_args != 2) { return; } -readline_set_completion_index(rs, strlen(str)); -add_completion_option(rs, str, reset); -add_completion_option(rs, str, shutdown); -add_completion_option(rs, str, poweroff); -add_completion_option(rs, str, pause); -add_completion_option(rs, str, debug); -add_completion_option(rs, str, none); +len = strlen(str); +readline_set_completion_index(rs, len); +for (i = 0; watchdog_actions[i].name; i++) { +const char *name = watchdog_actions[i].name; + +if (!strncmp(str, name, len)) { +readline_add_completion(rs, name); +} +} } void migrate_set_capability_completion(ReadLineState *rs, int nb_args,