This macro can be used to generate the boilerplate property_set_type_ptr() QOM set function for the specified scalar type. Replace the existing scaler set functions with the new macro.
Signed-off-by: Mark Cave-Ayland <[email protected]> Reviewed-by: Daniel P. Berrangé <[email protected]> --- qom/object.c | 72 ++++++++++++++++------------------------------------ 1 file changed, 22 insertions(+), 50 deletions(-) diff --git a/qom/object.c b/qom/object.c index 34aef7ca9f..8a1f80f613 100644 --- a/qom/object.c +++ b/qom/object.c @@ -2671,62 +2671,34 @@ static char *object_get_type(Object *obj, Error **errp) visit_type_##type(v, name, &value, errp); \ } + +#define OBJECT_PROPERTY_SCALAR_SETTER(type) \ + static void property_set_##type##_ptr(Object *obj, Visitor *v, \ + const char *name, \ + void *opaque, Error **errp) \ + { \ + type##_t *field = opaque; \ + type##_t value; \ + \ + if (!visit_type_##type(v, name, &value, errp)) { \ + return; \ + } \ + \ + *field = value; \ + } + OBJECT_PROPERTY_SCALAR_GETTER(uint8) +OBJECT_PROPERTY_SCALAR_SETTER(uint8) OBJECT_PROPERTY_SCALAR_GETTER(uint16) +OBJECT_PROPERTY_SCALAR_SETTER(uint16) OBJECT_PROPERTY_SCALAR_GETTER(uint32) +OBJECT_PROPERTY_SCALAR_SETTER(uint32) OBJECT_PROPERTY_SCALAR_GETTER(uint64) +OBJECT_PROPERTY_SCALAR_SETTER(uint64) -static void property_set_uint8_ptr(Object *obj, Visitor *v, const char *name, - void *opaque, Error **errp) -{ - uint8_t *field = opaque; - uint8_t value; - - if (!visit_type_uint8(v, name, &value, errp)) { - return; - } - - *field = value; -} - -static void property_set_uint16_ptr(Object *obj, Visitor *v, const char *name, - void *opaque, Error **errp) -{ - uint16_t *field = opaque; - uint16_t value; - - if (!visit_type_uint16(v, name, &value, errp)) { - return; - } - - *field = value; -} - -static void property_set_uint32_ptr(Object *obj, Visitor *v, const char *name, - void *opaque, Error **errp) -{ - uint32_t *field = opaque; - uint32_t value; - - if (!visit_type_uint32(v, name, &value, errp)) { - return; - } - - *field = value; -} - -static void property_set_uint64_ptr(Object *obj, Visitor *v, const char *name, - void *opaque, Error **errp) -{ - uint64_t *field = opaque; - uint64_t value; - - if (!visit_type_uint64(v, name, &value, errp)) { - return; - } +#undef OBJECT_PROPERTY_SCALAR_GETTER +#undef OBJECT_PROPERTY_SCALAR_SETTER - *field = value; -} ObjectProperty * object_property_add_uint8_ptr(Object *obj, const char *name, -- 2.43.0
