On Tue, Oct 22, 2024 at 6:31 AM Philippe Mathieu-Daudé <phi...@linaro.org> wrote: > > -void qdev_property_add_static(DeviceState *dev, Property *prop) > > +void qdev_property_add_static(DeviceState *dev, const Property *prop) > > { > > Object *obj = OBJECT(dev); > > ObjectProperty *op; > > @@ -980,7 +980,7 @@ void qdev_property_add_static(DeviceState *dev, > > Property *prop) > > field_prop_getter(prop->info), > > field_prop_setter(prop->info), > > prop->info->release, > > - prop); > > + (Property *)prop); > > I like the overall patch idea, but I'm not keen on casting > const to non-const. Should we adapt the callee -- here > object_property_add() -- to also take a const argument?
This argument goes into prop->opaque and is passed to all accessor/resolver/finalizers functions. So it would be a much larger change because it needs to change all those functions from "void *opaque" to "const void *opaque". It would also be an issue because some finalizers write to the opaque for good reason: static void object_finalize_child_property( Object *obj, const char *name, void *opaque) { Object *child = opaque; if (child->class->unparent) { (child->class->unparent)(child); } child->parent = NULL; // <--- here object_unref(child); } So, it's not great but it seems necessary. At least keeping the const within qdev properties makes things "safer" within that realm. Paolo