* Philippe Mathieu-Daudé (philmd@linaro.org) wrote:
> HMPCommand arrays are filled with target-specific
> commands, so defined in a target-specific unit.
> Introduce the hmp_cmds_for_target() to allow
> target-agnostic code to access the arrays.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Dr. David Alan Gilbert <dave@treblig.org>
> ---
> monitor/monitor-internal.h | 9 +++++++--
> monitor/hmp-target.c | 13 ++++++++-----
> monitor/hmp.c | 8 +++++---
> 3 files changed, 20 insertions(+), 10 deletions(-)
>
> diff --git a/monitor/monitor-internal.h b/monitor/monitor-internal.h
> index 7735c731083..feca111ae31 100644
> --- a/monitor/monitor-internal.h
> +++ b/monitor/monitor-internal.h
> @@ -169,8 +169,6 @@ extern QmpCommandList qmp_commands, qmp_cap_negotiation_commands;
> extern QemuMutex monitor_lock;
> extern MonitorList mon_list;
>
> -extern HMPCommand hmp_cmds[];
> -
> void monitor_data_init(Monitor *mon, bool is_qmp, bool skip_flush,
> bool use_io_thread);
> void monitor_data_destroy(Monitor *mon);
> @@ -187,4 +185,11 @@ int get_monitor_def(Monitor *mon, int64_t *pval, const char *name);
> void handle_hmp_command(MonitorHMP *mon, const char *cmdline);
> int hmp_compare_cmd(const char *name, const char *list);
>
> +/*
> + * hmp_cmds_for_target: Return array of HMPCommand entries
> + *
> + * If @info_command is true, return the particular 'info foo' commands array.
> + */
> +HMPCommand *hmp_cmds_for_target(bool info_command);
> +
> #endif
> diff --git a/monitor/hmp-target.c b/monitor/hmp-target.c
> index 37dfd7fd4c6..59c60d13b52 100644
> --- a/monitor/hmp-target.c
> +++ b/monitor/hmp-target.c
> @@ -44,8 +44,6 @@
> /* Make devices configuration available for use in hmp-commands*.hx templates */
> #include CONFIG_DEVICES
>
> -static HMPCommand hmp_info_cmds[];
> -
> /**
> * Is @name in the '|' separated list of names @list?
> */
> @@ -76,11 +74,16 @@ static HMPCommand hmp_info_cmds[] = {
> };
>
> /* hmp_cmds and hmp_info_cmds would be sorted at runtime */
> -HMPCommand hmp_cmds[] = {
> +static HMPCommand hmp_cmds[] = {
> #include "hmp-commands.h"
> { NULL, NULL, },
> };
>
> +HMPCommand *hmp_cmds_for_target(bool info_command)
> +{
> + return info_command ? hmp_info_cmds : hmp_cmds;
> +}
> +
> /*
> * Set @pval to the value in the register identified by @name.
> * return 0 if OK, -1 if not found
> @@ -148,7 +151,7 @@ static void __attribute__((__constructor__)) sortcmdlist(void)
> void monitor_register_hmp(const char *name, bool info,
> void (*cmd)(Monitor *mon, const QDict *qdict))
> {
> - HMPCommand *table = info ? hmp_info_cmds : hmp_cmds;
> + HMPCommand *table = hmp_cmds_for_target(info);
>
> while (table->name != NULL) {
> if (strcmp(table->name, name) == 0) {
> @@ -164,7 +167,7 @@ void monitor_register_hmp(const char *name, bool info,
> void monitor_register_hmp_info_hrt(const char *name,
> HumanReadableText *(*handler)(Error **errp))
> {
> - HMPCommand *table = hmp_info_cmds;
> + HMPCommand *table = hmp_cmds_for_target(true);
>
> while (table->name != NULL) {
> if (strcmp(table->name, name) == 0) {
> diff --git a/monitor/hmp.c b/monitor/hmp.c
> index 4caafbc7146..17e5756986f 100644
> --- a/monitor/hmp.c
> +++ b/monitor/hmp.c
> @@ -301,7 +301,7 @@ void hmp_help_cmd(Monitor *mon, const char *name)
> }
>
> /* 2. dump the contents according to parsed args */
> - help_cmd_dump(mon, hmp_cmds, args, nb_args, 0);
> + help_cmd_dump(mon, hmp_cmds_for_target(false), args, nb_args, 0);
>
> free_cmdline_args(args, nb_args);
> }
> @@ -1131,7 +1131,8 @@ void handle_hmp_command(MonitorHMP *mon, const char *cmdline)
>
> trace_handle_hmp_command(mon, cmdline);
>
> - cmd = monitor_parse_command(mon, cmdline, &cmdline, hmp_cmds);
> + cmd = monitor_parse_command(mon, cmdline, &cmdline,
> + hmp_cmds_for_target(false));
> if (!cmd) {
> return;
> }
> @@ -1375,7 +1376,8 @@ static void monitor_find_completion(void *opaque,
> }
>
> /* 2. auto complete according to args */
> - monitor_find_completion_by_table(mon, hmp_cmds, args, nb_args);
> + monitor_find_completion_by_table(mon, hmp_cmds_for_target(false),
> + args, nb_args);
>
> cleanup:
> free_cmdline_args(args, nb_args);
> --
> 2.52.0
>
--
-----Open up your eyes, open up your mind, open up your code -------
/ Dr. David Alan Gilbert | Running GNU/Linux | Happy \
\ dave @ treblig.org | | In Hex /
\ _________________________|_____ http://www.treblig.org |_______/