On Fri, Aug 21, 2026 at 12:14:22PM +0100, Mark Cave-Ayland wrote:
> This adds a class property that references a bool within the object instance
> and is intended to be used as a replacement for 
> object_class_property_add_bool()
> where possible.
> 
> Signed-off-by: Mark Cave-Ayland <[email protected]>
> Reviewed-by: Marc-André Lureau <[email protected]>
> ---
>  include/qom/object.h | 18 ++++++++++++++++++
>  qom/object.c         | 43 +++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 61 insertions(+)
> 
> diff --git a/include/qom/object.h b/include/qom/object.h
> index 8dead29284..de37016ba8 100644
> --- a/include/qom/object.h
> +++ b/include/qom/object.h
> @@ -2017,6 +2017,24 @@ typedef enum {
>      OBJ_PROP_FLAG_READWRITE = (OBJ_PROP_FLAG_READ | OBJ_PROP_FLAG_WRITE),
>  } ObjectPropertyFlags;
>  
> +/**
> + * object_class_property_add_bool_ptr:
> + * @klass: the object class to add a property to
> + * @name: the name of the property
> + * @offset: the offset from the object instance where the bool value is
> + *   stored
> + * @flags: bitwise-or'd ObjectPropertyFlags
> + *
> + * Add an boolean property in memory.  This function will add a
> + * property of type 'bool'.
> + *
> + * Returns: The newly added property on success, or %NULL on failure.
> + */
> +ObjectProperty *object_class_property_add_bool_ptr(ObjectClass *klass,
> +                                         const char *name,
> +                                         ptrdiff_t offset,
> +                                         ObjectPropertyFlags flags);
> +
>  /**
>   * object_property_add_uint8_ptr:
>   * @obj: the object to add a property to
> diff --git a/qom/object.c b/qom/object.c
> index f91764aaa7..635eeeac77 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -2750,6 +2750,49 @@ DEFINE_OBJECT_CLASS_PROPERTY_SCALAR_METHODS(uint64)
>  #undef DEFINE_OBJECT_CLASS_PROPERTY_SCALAR_METHODS
>  
>  
> +static void property_class_get_bool_ptr(Object *obj, Visitor *v,
> +                                        const char *name,
> +                                        void *opaque, Error **errp)
> +{
> +    bool value = *(bool *)object_class_prop_ptr(obj, (ptrdiff_t)opaque);
> +
> +    visit_type_bool(v, name, &value, errp);
> +}
> +
> +static void property_class_set_bool_ptr(Object *obj, Visitor *v,
> +                                        const char *name,
> +                                        void *opaque, Error **errp)
> +{
> +    bool *field = (bool *)object_class_prop_ptr(obj, (ptrdiff_t)opaque);
> +    bool value;
> +
> +    if (!visit_type_bool(v, name, &value, errp)) {
> +        return;
> +    }
> +
> +    *field = value;
> +}

Am I missing the reason why we can't use

  DEFINE_OBJECT_CLASS_PROPERTY_SCALAR_METHODS(bool)

?  If so, could that be mentioned in the commit message.

> +
> +ObjectProperty *
> +object_class_property_add_bool_ptr(ObjectClass *klass, const char *name,
> +                                   ptrdiff_t offset,
> +                                   ObjectPropertyFlags flags)
> +{
> +    ObjectPropertyAccessor *getter = NULL;
> +    ObjectPropertyAccessor *setter = NULL;
> +
> +    if ((flags & OBJ_PROP_FLAG_READ) == OBJ_PROP_FLAG_READ) {
> +        getter = property_class_get_bool_ptr;
> +    }
> +
> +    if ((flags & OBJ_PROP_FLAG_WRITE) == OBJ_PROP_FLAG_WRITE) {
> +        setter = property_class_set_bool_ptr;
> +    }
> +
> +    return object_class_property_add(klass, name, "bool",
> +                                     getter, setter, NULL, (void *)offset);
> +}
> +
>  ObjectProperty *
>  object_property_add_uint8_ptr(Object *obj, const char *name,
>                                const uint8_t *v,
> -- 
> 2.43.0
> 

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