diff mbox

[RFC,v1,3/8] qom: Implement overloaded property setters

Message ID 7c533ae96ef7d7144c4edac75c175e1e2903b46b.1434320585.git.peter.crosthwaite@xilinx.com
State New
Headers show

Commit Message

Peter Crosthwaite June 14, 2015, 10:36 p.m. UTC
Set the description/value of all matching properties for a given
name.

Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
 qom/object.c | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)
diff mbox

Patch

diff --git a/qom/object.c b/qom/object.c
index 79172f7..46abf41 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -834,14 +834,24 @@  void object_property_set(Object *obj, Visitor *v, const char *name,
                          Error **errp)
 {
     ObjectProperty *prop = object_property_find(obj, name, errp);
+    Error *local_err = NULL;
+
     if (prop == NULL) {
         return;
     }
 
-    if (!prop->set) {
-        error_set(errp, QERR_PERMISSION_DENIED);
-    } else {
-        prop->set(obj, v, prop->opaque, name, errp);
+    QTAILQ_FOREACH(prop, &obj->properties, node) {
+        if (strcmp(prop->name, name) == 0) {
+            if (!prop->set) {
+                error_set(&local_err, QERR_PERMISSION_DENIED);
+            } else {
+                prop->set(obj, v, prop->opaque, name, &local_err);
+            }
+        }
+        if (local_err) {
+            error_propagate(errp, local_err);
+            return;
+        }
     }
 }
 
@@ -1797,13 +1807,12 @@  void object_property_set_description(Object *obj, const char *name,
 {
     ObjectProperty *op;
 
-    op = object_property_find(obj, name, errp);
-    if (!op) {
-        return;
+    QTAILQ_FOREACH(op, &obj->properties, node) {
+        if (strcmp(op->name, name) == 0) {
+            g_free(op->description);
+            op->description = g_strdup(description);
+        }
     }
-
-    g_free(op->description);
-    op->description = g_strdup(description);
 }
 
 static void object_instance_init(Object *obj)