aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Xu <peterx@redhat.com>2024-11-21 14:21:51 -0500
committerPhilippe Mathieu-Daudé <philmd@linaro.org>2024-12-20 17:44:55 +0100
commit6e1e04ef035cf687e868858ab6bd18a177e1b822 (patch)
tree436d5b8b4d26211149de892b163f26134272a29b
parente469b331cd1bb2a3d4a0b02b37390fd79947e225 (diff)
downloadqemu-6e1e04ef035cf687e868858ab6bd18a177e1b822.zip
qemu-6e1e04ef035cf687e868858ab6bd18a177e1b822.tar.gz
qemu-6e1e04ef035cf687e868858ab6bd18a177e1b822.tar.bz2
qom: New object_property_add_new_container()
To move towards explicit creations of containers, starting that by providing a helper for creating container objects. Signed-off-by: Peter Xu <peterx@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-ID: <20241121192202.4155849-3-peterx@redhat.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
-rw-r--r--include/qom/object.h12
-rw-r--r--qom/container.c14
2 files changed, 23 insertions, 3 deletions
diff --git a/include/qom/object.h b/include/qom/object.h
index de02e16..95d6e06 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -2020,6 +2020,18 @@ int object_child_foreach_recursive(Object *obj,
Object *container_get(Object *root, const char *path);
/**
+ * object_property_add_new_container:
+ * @obj: the parent object
+ * @name: the name of the parent object's property to add
+ *
+ * Add a newly created container object to a parent object.
+ *
+ * Returns: the newly created container object. Its reference count is 1,
+ * and the reference is owned by the parent object.
+ */
+Object *object_property_add_new_container(Object *obj, const char *name);
+
+/**
* object_property_help:
* @name: the name of the property
* @type: the type of the property
diff --git a/qom/container.c b/qom/container.c
index cfec92a..20ab74b 100644
--- a/qom/container.c
+++ b/qom/container.c
@@ -24,6 +24,16 @@ static void container_register_types(void)
type_register_static(&container_info);
}
+Object *object_property_add_new_container(Object *obj, const char *name)
+{
+ Object *child = object_new(TYPE_CONTAINER);
+
+ object_property_add_child(obj, name, child);
+ object_unref(child);
+
+ return child;
+}
+
Object *container_get(Object *root, const char *path)
{
Object *obj, *child;
@@ -37,9 +47,7 @@ Object *container_get(Object *root, const char *path)
for (i = 1; parts[i] != NULL; i++, obj = child) {
child = object_resolve_path_component(obj, parts[i]);
if (!child) {
- child = object_new(TYPE_CONTAINER);
- object_property_add_child(obj, parts[i], child);
- object_unref(child);
+ child = object_property_add_new_container(obj, parts[i]);
}
}