mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
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: Peter Crosthwaite <peter.crosthwaite@xilinx.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
64607d0881
commit
d190698e6f
1 changed files with 11 additions and 1 deletions
12
qom/object.c
12
qom/object.c
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue