On Wed, Jul 01, 2026 at 02:57:11PM +0200, Markus Armbruster wrote:
> Daniel P. Berrangé <[email protected]> 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 <[email protected]>
> > Tested-by: Peter Krempa <[email protected]>
> > Signed-off-by: Daniel P. Berrangé <[email protected]>
> > ---
> >  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 :|

Reply via email to