Hi,

On 21/10/24 13:35, Paolo Bonzini wrote:
Constify all accesses to qdev properties, except for the
ObjectPropertyAccessor itself.  This makes it possible to place them in
read-only memory, and also lets Rust bindings switch from "static mut"
arrays to "static"; which is advantageous, because mutable statics are
highly discouraged.

Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
---
  include/hw/qdev-core.h       |  4 ++--
  include/hw/qdev-properties.h |  4 ++--
  hw/core/qdev-properties.c    | 26 +++++++++++++-------------
  system/qdev-monitor.c        |  2 +-
  4 files changed, 18 insertions(+), 18 deletions(-)


-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 keep on casting
const to non-const. Should we adapt the callee -- here
object_property_add() -- to also take a const argument?

object_property_set_description(obj, prop->name,
                                      prop->info->description);
@@ -994,7 +994,7 @@ void qdev_property_add_static(DeviceState *dev, Property 
*prop)
  }
static void qdev_class_add_property(DeviceClass *klass, const char *name,
-                                    Property *prop)
+                                    const Property *prop)
  {
      ObjectClass *oc = OBJECT_CLASS(klass);
      ObjectProperty *op;
@@ -1007,7 +1007,7 @@ static void qdev_class_add_property(DeviceClass *klass, 
const char *name,
                                         field_prop_getter(prop->info),
                                         field_prop_setter(prop->info),
                                         prop->info->release,
-                                       prop);
+                                       (Property *)prop);
      }
      if (prop->set_default) {
          prop->info->set_default_value(op, prop);
@@ -1046,7 +1046,7 @@ static void qdev_get_legacy_property(Object *obj, Visitor 
*v,
   * Do not use this in new code!  QOM Properties added through this interface
   * will be given names in the "legacy" namespace.
   */
-static void qdev_class_add_legacy_property(DeviceClass *dc, Property *prop)
+static void qdev_class_add_legacy_property(DeviceClass *dc, const Property 
*prop)
  {
      g_autofree char *name = NULL;
@@ -1058,12 +1058,12 @@ static void qdev_class_add_legacy_property(DeviceClass *dc, Property *prop)
      name = g_strdup_printf("legacy-%s", prop->name);
      object_class_property_add(OBJECT_CLASS(dc), name, "str",
          prop->info->print ? qdev_get_legacy_property : prop->info->get,
-        NULL, NULL, prop);
+        NULL, NULL, (Property *)prop);
  }

Reply via email to