On Wed, Jul 01, 2026 at 02:57:11PM +0200, Markus Armbruster wrote:
Daniel P. Berrangé <berrange@redhat.com> writes:
The 'user_creatable_del' method doesn't want the 'Object *', but instead the "id" of the object to be deleted. While most of its work could be done with the "Object *" alone, purging the QemuOpts values needs the "id".
The "id" is not recorded against an Object though, it is indirectly stored as a property linking the parent and child objects together. Add an accessor that can fetch this property name.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Tested-by: Peter Krempa <pkrempa@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- include/qom/object.h | 10 ++++++++++ qom/object.c | 17 +++++++++++++++++ 2 files changed, 27 insertions(+)
diff --git a/include/qom/object.h b/include/qom/object.h index 11f55613fc..216d2a30f6 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -1759,6 +1759,16 @@ ObjectProperty *object_property_try_add_child(Object *obj, const char *name, ObjectProperty *object_property_add_child(Object *obj, const char *name, Object *child);
+/** + * object_property_get_child_name: + * @obj: the object that owns the property + * @child: the object referenced by the child property + * + * Return the property name against which @child is registered + * with @obj, or NULL if @obj is not a parent of @child. + */ +char *object_property_get_child_name(Object *obj, Object *child); + typedef enum { /* Unref the link pointer when the property is deleted */ OBJ_PROP_LINK_STRONG = 0x1, diff --git a/qom/object.c b/qom/object.c index f79b2cf361..66bbd1488b 100644 --- a/qom/object.c +++ b/qom/object.c @@ -1952,6 +1952,23 @@ object_property_add_child(Object *obj, const char *name, return object_property_try_add_child(obj, name, child, &error_abort); }
+char *object_property_get_child_name(Object *obj, Object *child) +{ + ObjectProperty *prop; + GHashTableIter iter; + gpointer key, value; + + g_hash_table_iter_init(&iter, obj->properties); + while (g_hash_table_iter_next(&iter, &key, &value)) { + prop = value; + if (object_property_is_child(prop) && prop->opaque == child) { + return g_strdup(prop->name); + } + } + return NULL; +}
Isn't this a slight variation of object_get_canonical_path_component()?
Oh yes, you're right. That long method name didn't grab me as the right functionality, but in fact it is. We could also use it to retain the better error message in the earlier patch you commented on where I lost the "id" value from the errors.
+ + void object_property_allow_set_link(const Object *obj, const char *name, Object *val, Error **errp) {
With regards, Daniel -- |: https://berrange.com ~~ https://hachyderm.io/@berrange :| |: https://libvirt.org ~~ https://entangle-photo.org :| |: https://pixelfed.art/berrange ~~ https://fstop138.berrange.com :|