object: express const link with link property
Let's not mix child property and link property callbacks, as this is confusing, use LinkProperty with DIRECT flag to hold the target pointer. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20200110153039.1379601-16-marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
9941d37b4d
commit
4a8d57989b
41
qom/object.c
41
qom/object.c
|
@ -1844,19 +1844,23 @@ static void object_release_link_property(Object *obj, const char *name,
|
||||||
g_free(prop);
|
g_free(prop);
|
||||||
}
|
}
|
||||||
|
|
||||||
void object_property_add_link(Object *obj, const char *name,
|
static void object_add_link_prop(Object *obj, const char *name,
|
||||||
const char *type, Object **targetp,
|
const char *type, void *ptr,
|
||||||
void (*check)(const Object *, const char *,
|
void (*check)(const Object *, const char *,
|
||||||
Object *, Error **),
|
Object *, Error **),
|
||||||
ObjectPropertyLinkFlags flags,
|
ObjectPropertyLinkFlags flags,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
LinkProperty *prop = g_malloc(sizeof(*prop));
|
LinkProperty *prop = g_malloc(sizeof(*prop));
|
||||||
gchar *full_type;
|
gchar *full_type;
|
||||||
ObjectProperty *op;
|
ObjectProperty *op;
|
||||||
|
|
||||||
prop->targetp = targetp;
|
if (flags & OBJ_PROP_LINK_DIRECT) {
|
||||||
|
prop->target = ptr;
|
||||||
|
} else {
|
||||||
|
prop->targetp = ptr;
|
||||||
|
}
|
||||||
prop->check = check;
|
prop->check = check;
|
||||||
prop->flags = flags;
|
prop->flags = flags;
|
||||||
|
|
||||||
|
@ -1880,20 +1884,21 @@ out:
|
||||||
g_free(full_type);
|
g_free(full_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void object_property_add_link(Object *obj, const char *name,
|
||||||
|
const char *type, Object **targetp,
|
||||||
|
void (*check)(const Object *, const char *,
|
||||||
|
Object *, Error **),
|
||||||
|
ObjectPropertyLinkFlags flags,
|
||||||
|
Error **errp)
|
||||||
|
{
|
||||||
|
object_add_link_prop(obj, name, type, targetp, check, flags, errp);
|
||||||
|
}
|
||||||
|
|
||||||
void object_property_add_const_link(Object *obj, const char *name,
|
void object_property_add_const_link(Object *obj, const char *name,
|
||||||
Object *target, Error **errp)
|
Object *target, Error **errp)
|
||||||
{
|
{
|
||||||
char *link_type;
|
object_add_link_prop(obj, name, object_get_typename(target), target,
|
||||||
ObjectProperty *op;
|
NULL, OBJ_PROP_LINK_DIRECT, errp);
|
||||||
|
|
||||||
link_type = g_strdup_printf("link<%s>", object_get_typename(target));
|
|
||||||
op = object_property_add(obj, name, link_type,
|
|
||||||
object_get_child_property, NULL,
|
|
||||||
NULL, target, errp);
|
|
||||||
if (op != NULL) {
|
|
||||||
op->resolve = object_resolve_child_property;
|
|
||||||
}
|
|
||||||
g_free(link_type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gchar *object_get_canonical_path_component(Object *obj)
|
gchar *object_get_canonical_path_component(Object *obj)
|
||||||
|
|
Loading…
Reference in New Issue