diff options
author | Igor Mammedov <imammedo@redhat.com> | 2017-01-10 13:53:14 +0100 |
---|---|---|
committer | Michael Roth <mdroth@linux.vnet.ibm.com> | 2017-03-30 12:30:09 -0500 |
commit | dd39c544f4136ba390d1f976f520004a3ffad7e5 (patch) | |
tree | 46e1a896f8be71992aa2ec10282f1f64ca8495b2 | |
parent | 879b6454be1e29241d5b7d6986adcdb95d883856 (diff) |
monitor: reuse user_creatable_add_opts() instead of user_creatable_add()
Simplify code by dropping ~57LOC by merging user_creatable_add()
into user_creatable_add_opts() and using the later from monitor.
Along with it allocate opts_visitor_new() once in user_creatable_add_opts().
As result we have one less API func and a more readable/simple
user_creatable_add_opts() vs user_creatable_add().
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <1484052795-158195-3-git-send-email-imammedo@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
(cherry picked from commit 3a4641054e320d8ad7e780c30010b1c1dbfc56e8)
* functional dep for 9a6d1ac
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
-rw-r--r-- | hmp.c | 5 | ||||
-rw-r--r-- | include/qom/object_interfaces.h | 17 | ||||
-rw-r--r-- | qom/object_interfaces.c | 71 |
3 files changed, 18 insertions, 75 deletions
@@ -1809,7 +1809,6 @@ void hmp_object_add(Monitor *mon, const QDict *qdict) { Error *err = NULL; QemuOpts *opts; - Visitor *v; Object *obj = NULL; opts = qemu_opts_from_qdict(qemu_find_opts("object"), qdict, &err); @@ -1818,9 +1817,7 @@ void hmp_object_add(Monitor *mon, const QDict *qdict) return; } - v = opts_visitor_new(opts); - obj = user_creatable_add(qdict, v, &err); - visit_free(v); + obj = user_creatable_add_opts(opts, &err); qemu_opts_del(opts); if (err) { diff --git a/include/qom/object_interfaces.h b/include/qom/object_interfaces.h index 8b17f4def7..fdd7603c84 100644 --- a/include/qom/object_interfaces.h +++ b/include/qom/object_interfaces.h @@ -76,23 +76,6 @@ void user_creatable_complete(Object *obj, Error **errp); bool user_creatable_can_be_deleted(UserCreatable *uc, Error **errp); /** - * user_creatable_add: - * @qdict: the object definition - * @v: the visitor - * @errp: if an error occurs, a pointer to an area to store the error - * - * Create an instance of the user creatable object whose type - * is defined in @qdict by the 'qom-type' field, placing it - * in the object composition tree with name provided by the - * 'id' field. The remaining fields in @qdict are used to - * initialize the object properties. - * - * Returns: the newly created object or NULL on error - */ -Object *user_creatable_add(const QDict *qdict, - Visitor *v, Error **errp); - -/** * user_creatable_add_type: * @type: the object type name * @id: the unique ID for the object diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c index ded4d84c85..f79a7ceae0 100644 --- a/qom/object_interfaces.c +++ b/qom/object_interfaces.c @@ -35,57 +35,6 @@ bool user_creatable_can_be_deleted(UserCreatable *uc, Error **errp) } } - -Object *user_creatable_add(const QDict *qdict, - Visitor *v, Error **errp) -{ - char *type = NULL; - char *id = NULL; - Object *obj = NULL; - Error *local_err = NULL; - QDict *pdict; - - pdict = qdict_clone_shallow(qdict); - - visit_start_struct(v, NULL, NULL, 0, &local_err); - if (local_err) { - goto out; - } - - qdict_del(pdict, "qom-type"); - visit_type_str(v, "qom-type", &type, &local_err); - if (local_err) { - goto out_visit; - } - - qdict_del(pdict, "id"); - visit_type_str(v, "id", &id, &local_err); - if (local_err) { - goto out_visit; - } - visit_check_struct(v, &local_err); - if (local_err) { - goto out_visit; - } - - obj = user_creatable_add_type(type, id, pdict, v, &local_err); - -out_visit: - visit_end_struct(v, NULL); - -out: - QDECREF(pdict); - g_free(id); - g_free(type); - if (local_err) { - error_propagate(errp, local_err); - object_unref(obj); - return NULL; - } - return obj; -} - - Object *user_creatable_add_type(const char *type, const char *id, const QDict *qdict, Visitor *v, Error **errp) @@ -158,13 +107,27 @@ Object *user_creatable_add_opts(QemuOpts *opts, Error **errp) { Visitor *v; QDict *pdict; - Object *obj = NULL; + Object *obj; + const char *id = qemu_opts_id(opts); + const char *type = qemu_opt_get(opts, "qom-type"); + + if (!type) { + error_setg(errp, QERR_MISSING_PARAMETER, "qom-type"); + return NULL; + } + if (!id) { + error_setg(errp, QERR_MISSING_PARAMETER, "id"); + return NULL; + } - v = opts_visitor_new(opts); pdict = qemu_opts_to_qdict(opts, NULL); + qdict_del(pdict, "qom-type"); + qdict_del(pdict, "id"); - obj = user_creatable_add(pdict, v, errp); + v = opts_visitor_new(opts); + obj = user_creatable_add_type(type, id, pdict, v, errp); visit_free(v); + QDECREF(pdict); return obj; } |