Commit bc2256c4 authored by Daniel P. Berrangé's avatar Daniel P. Berrangé Committed by Andreas Färber
Browse files

qom: Add helper function for getting user objects root



Add object_get_objects_root() function which is a convenience for
obtaining the Object * located at /objects in the object
composition tree. Convert existing code over to use the new
API where appropriate.

Signed-off-by: default avatarDaniel P. Berrange <berrange@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Signed-off-by: default avatarAndreas Färber <afaerber@suse.de>
parent f08f9271
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -1026,6 +1026,18 @@ const char *object_property_get_type(Object *obj, const char *name,
 */
Object *object_get_root(void);


/**
 * object_get_objects_root:
 *
 * Get the container object that holds user created
 * object instances. This is the object at path
 * "/objects"
 *
 * Returns: the user object container
 */
Object *object_get_objects_root(void);

/**
 * object_get_canonical_path_component:
 *
+1 −3
Original line number Diff line number Diff line
@@ -19,8 +19,6 @@
#include "qmp-commands.h"
#include "qemu/error-report.h"

#define IOTHREADS_PATH "/objects"

typedef ObjectClass IOThreadClass;

#define IOTHREAD_GET_CLASS(obj) \
@@ -160,7 +158,7 @@ IOThreadInfoList *qmp_query_iothreads(Error **errp)
{
    IOThreadInfoList *head = NULL;
    IOThreadInfoList **prev = &head;
    Object *container = container_get(object_get_root(), IOTHREADS_PATH);
    Object *container = object_get_objects_root();

    object_child_foreach(container, query_one_iothread, &prev);
    return head;
+1 −1
Original line number Diff line number Diff line
@@ -485,7 +485,7 @@ MemdevList *qmp_query_memdev(Error **errp)
    Object *obj;
    MemdevList *list = NULL;

    obj = object_resolve_path("/objects", NULL);
    obj = object_get_objects_root();
    if (obj == NULL) {
        return NULL;
    }
+3 −3
Original line number Diff line number Diff line
@@ -651,7 +651,7 @@ void object_add(const char *type, const char *id, const QDict *qdict,
        }
    }

    object_property_add_child(container_get(object_get_root(), "/objects"),
    object_property_add_child(object_get_objects_root(),
                              id, obj, &local_err);
    if (local_err) {
        goto out;
@@ -659,7 +659,7 @@ void object_add(const char *type, const char *id, const QDict *qdict,

    user_creatable_complete(obj, &local_err);
    if (local_err) {
        object_property_del(container_get(object_get_root(), "/objects"),
        object_property_del(object_get_objects_root(),
                            id, &error_abort);
        goto out;
    }
@@ -706,7 +706,7 @@ void qmp_object_del(const char *id, Error **errp)
    Object *container;
    Object *obj;

    container = container_get(object_get_root(), "/objects");
    container = object_get_objects_root();
    obj = object_resolve_path_component(container, id);
    if (!obj) {
        error_setg(errp, "object id not found");
+5 −0
Original line number Diff line number Diff line
@@ -1054,6 +1054,11 @@ Object *object_get_root(void)
    return root;
}

Object *object_get_objects_root(void)
{
    return container_get(object_get_root(), "/objects");
}

static void object_get_child_property(Object *obj, Visitor *v, void *opaque,
                                      const char *name, Error **errp)
{