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>
This commit is contained in:
Peter Xu 2024-11-21 14:21:51 -05:00 committed by Philippe Mathieu-Daudé
parent e469b331cd
commit 6e1e04ef03
2 changed files with 23 additions and 3 deletions

View file

@ -2019,6 +2019,18 @@ int object_child_foreach_recursive(Object *obj,
*/ */
Object *container_get(Object *root, const char *path); 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: * object_property_help:
* @name: the name of the property * @name: the name of the property

View file

@ -24,6 +24,16 @@ static void container_register_types(void)
type_register_static(&container_info); 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 *container_get(Object *root, const char *path)
{ {
Object *obj, *child; Object *obj, *child;
@ -37,9 +47,7 @@ Object *container_get(Object *root, const char *path)
for (i = 1; parts[i] != NULL; i++, obj = child) { for (i = 1; parts[i] != NULL; i++, obj = child) {
child = object_resolve_path_component(obj, parts[i]); child = object_resolve_path_component(obj, parts[i]);
if (!child) { if (!child) {
child = object_new(TYPE_CONTAINER); child = object_property_add_new_container(obj, parts[i]);
object_property_add_child(obj, parts[i], child);
object_unref(child);
} }
} }