monitor: allow register hmp commands
Allow commands having a NULL cmd pointer, add a function to set the pointer later. Use case: allow modules implement hmp commands. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Jose R. Ziviani <jziviani@suse.de> Message-Id: <20210624103836.2382472-31-kraxel@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
dae0ec159f
commit
f0e48cbd79
@ -51,4 +51,7 @@ int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags);
|
||||
void monitor_fdset_dup_fd_remove(int dup_fd);
|
||||
int64_t monitor_fdset_dup_fd_find(int dup_fd);
|
||||
|
||||
void monitor_register_hmp(const char *name, bool info,
|
||||
void (*cmd)(Monitor *mon, const QDict *qdict));
|
||||
|
||||
#endif /* MONITOR_H */
|
||||
|
@ -1089,6 +1089,13 @@ void handle_hmp_command(MonitorHMP *mon, const char *cmdline)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!cmd->cmd) {
|
||||
/* FIXME: is it useful to try autoload modules here ??? */
|
||||
monitor_printf(&mon->common, "Command \"%.*s\" is not available.\n",
|
||||
(int)(cmdline - cmd_start), cmd_start);
|
||||
return;
|
||||
}
|
||||
|
||||
qdict = monitor_parse_arguments(&mon->common, &cmdline, cmd);
|
||||
if (!qdict) {
|
||||
while (cmdline > cmd_start && qemu_isspace(cmdline[-1])) {
|
||||
|
@ -1974,6 +1974,22 @@ static void sortcmdlist(void)
|
||||
compare_mon_cmd);
|
||||
}
|
||||
|
||||
void monitor_register_hmp(const char *name, bool info,
|
||||
void (*cmd)(Monitor *mon, const QDict *qdict))
|
||||
{
|
||||
HMPCommand *table = info ? hmp_info_cmds : hmp_cmds;
|
||||
|
||||
while (table->name != NULL) {
|
||||
if (strcmp(table->name, name) == 0) {
|
||||
g_assert(table->cmd == NULL);
|
||||
table->cmd = cmd;
|
||||
return;
|
||||
}
|
||||
table++;
|
||||
}
|
||||
g_assert_not_reached();
|
||||
}
|
||||
|
||||
void monitor_init_globals(void)
|
||||
{
|
||||
monitor_init_globals_core();
|
||||
|
Loading…
Reference in New Issue
Block a user