[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 10/25] hmp: special case help options for object_add
From: |
Paolo Bonzini |
Subject: |
[PATCH 10/25] hmp: special case help options for object_add |
Date: |
Mon, 18 Jan 2021 11:30:58 -0500 |
Fix "object_add help" and "object_add TYPE,help".
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
include/qom/object_interfaces.h | 9 ++++++++-
monitor/hmp-cmds.c | 22 ++++++++--------------
qom/object_interfaces.c | 2 +-
3 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/include/qom/object_interfaces.h b/include/qom/object_interfaces.h
index 07d5cc8832..abb23eaea3 100644
--- a/include/qom/object_interfaces.h
+++ b/include/qom/object_interfaces.h
@@ -149,6 +149,13 @@ typedef bool (*user_creatable_add_opts_predicate)(const
char *type);
int user_creatable_add_opts_foreach(void *opaque,
QemuOpts *opts, Error **errp);
+/**
+ * user_creatable_print_types:
+ *
+ * Prints a list of user-creatable objects to stdout or the monitor.
+ */
+void user_creatable_print_types(void);
+
/**
* user_creatable_print_help:
* @type: the QOM type to be added
@@ -174,7 +181,7 @@ bool user_creatable_print_help(const char *type, QemuOpts
*opts);
* no help was requested. It should only be called if we know that help is
* requested and it will always print some help.
*/
-void user_creatable_print_help_from_qdict(QDict *args);
+void user_creatable_print_help_from_qdict(const QDict *args);
/**
* user_creatable_del:
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index fd4d77e246..90dd91c6f5 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -1663,23 +1663,17 @@ void hmp_netdev_del(Monitor *mon, const QDict *qdict)
void hmp_object_add(Monitor *mon, const QDict *qdict)
{
Error *err = NULL;
- QemuOpts *opts;
- Object *obj = NULL;
- opts = qemu_opts_from_qdict(qemu_find_opts("object"), qdict, &err);
- if (err) {
- goto end;
+ if (is_help_option(qdict_get_str(qdict, "qom-type"))) {
+ user_creatable_print_types();
+ return;
}
-
- obj = user_creatable_add_opts(opts, &err);
- qemu_opts_del(opts);
-
-end:
- hmp_handle_error(mon, err);
-
- if (obj) {
- object_unref(obj);
+ if (qdict_haskey(qdict, "help")) {
+ user_creatable_print_help_from_qdict(qdict);
+ return;
}
+ user_creatable_add_dict((QDict *)qdict, true, &err);
+ hmp_handle_error(mon, err);
}
void hmp_getfd(Monitor *mon, const QDict *qdict)
diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c
index 6c7bd025dd..97bf88908e 100644
--- a/qom/object_interfaces.c
+++ b/qom/object_interfaces.c
@@ -280,7 +280,7 @@ bool user_creatable_print_help(const char *type, QemuOpts
*opts)
return false;
}
-void user_creatable_print_help_from_qdict(QDict *args)
+void user_creatable_print_help_from_qdict(const QDict *args)
{
const char *type = qdict_get_try_str(args, "qom-type");
--
2.26.2
[PATCH 15/25] vl: plumb keyval-based options into -set and -readconfig, Paolo Bonzini, 2021/01/18
[PATCH 16/25] qom: do not modify QDict argument in user_creatable_add_dict, Paolo Bonzini, 2021/01/18
[PATCH 14/25] qemu-config: parse configuration files to a QDict, Paolo Bonzini, 2021/01/18
[PATCH 12/25] qemu-config: add error propagation to qemu_config_parse, Paolo Bonzini, 2021/01/18