Commit d190698e authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

qom: allow creating an alias of a child<> property



Child properties must be unique.  Fix this problem by
turning their aliases into links.

The resolve function that forwards to the target property
does not have any knowledge of the target property's type,
so it works fine.

Reviewed-by: default avatarPeter Crosthwaite <peter.crosthwaite@xilinx.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 64607d08
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -1607,22 +1607,32 @@ void object_property_add_alias(Object *obj, const char *name,
    AliasProperty *prop;
    ObjectProperty *op;
    ObjectProperty *target_prop;
    gchar *prop_type;

    target_prop = object_property_find(target_obj, target_name, errp);
    if (!target_prop) {
        return;
    }

    if (object_property_is_child(target_prop)) {
        prop_type = g_strdup_printf("link%s",
                                    target_prop->type + strlen("child"));
    } else {
        prop_type = g_strdup(target_prop->type);
    }

    prop = g_malloc(sizeof(*prop));
    prop->target_obj = target_obj;
    prop->target_name = target_name;

    op = object_property_add(obj, name, target_prop->type,
    op = object_property_add(obj, name, prop_type,
                             property_get_alias,
                             property_set_alias,
                             property_release_alias,
                             prop, errp);
    op->resolve = property_resolve_alias;

    g_free(prop_type);
}

static void object_instance_init(Object *obj)