This will be used later to add support for alias class properties.
Signed-off-by: Mark Cave-Ayland <[email protected]>
---
qom/object.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/qom/object.c b/qom/object.c
index f79b2cf361..da4db3e0c7 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -2906,13 +2906,20 @@ typedef struct {
char *target_name;
} AliasProperty;
+static Object **
+object_alias_get_targetp(Object *obj, AliasProperty *lprop)
+{
+ return &lprop->target_obj;
+}
+
static void property_get_alias(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
AliasProperty *prop = opaque;
+ Object **target_obj = object_alias_get_targetp(obj, prop);
Visitor *alias_v = visitor_forward_field(v, prop->target_name, name);
- object_property_get(prop->target_obj, prop->target_name, alias_v, errp);
+ object_property_get(*target_obj, prop->target_name, alias_v, errp);
visit_free(alias_v);
}
@@ -2920,9 +2927,10 @@ static void property_set_alias(Object *obj, Visitor *v,
const char *name,
void *opaque, Error **errp)
{
AliasProperty *prop = opaque;
+ Object **target_obj = object_alias_get_targetp(obj, prop);
Visitor *alias_v = visitor_forward_field(v, prop->target_name, name);
- object_property_set(prop->target_obj, prop->target_name, alias_v, errp);
+ object_property_set(*target_obj, prop->target_name, alias_v, errp);
visit_free(alias_v);
}
@@ -2930,8 +2938,9 @@ static Object *property_resolve_alias(Object *obj, void
*opaque,
const char *part)
{
AliasProperty *prop = opaque;
+ Object **target_obj = object_alias_get_targetp(obj, prop);
- return object_resolve_path_component(prop->target_obj, prop->target_name);
+ return object_resolve_path_component(*target_obj, prop->target_name);
}
static void property_release_alias(Object *obj, const char *name, void *opaque)
--
2.43.0