All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH qom v1 1/2] qom: object_property_add: Add automatic arrayification
@ 2014-07-31  5:34 Peter Crosthwaite
  2014-07-31  5:35 ` [Qemu-devel] [PATCH qom v1 2/2] memory: remove object_property_add_child_array Peter Crosthwaite
  2014-07-31  9:38 ` [Qemu-devel] [PATCH qom v1 1/2] qom: object_property_add: Add automatic arrayification Paolo Bonzini
  0 siblings, 2 replies; 4+ messages in thread
From: Peter Crosthwaite @ 2014-07-31  5:34 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, afaerber

If "[*]" is given as the last part of a QOM property name, treat that
as an array property. The added property is given the first available
name, replacing the * with a decimal number counting from 0.

First add with name "foo[*]" will be "foo[0]". Second "foo[1]" and so
on.

Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
Suggest by Paolo and first pass discussion on list about the feature
here:

https://lists.nongnu.org/archive/html/qemu-devel/2014-06/msg03794.html

 qom/object.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/qom/object.c b/qom/object.c
index 0e8267b..c869e8e 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -739,6 +739,28 @@ object_property_add(Object *obj, const char *name, const char *type,
 {
     ObjectProperty *prop;
 
+    if (strlen(name) >= 3 && !strncmp(name + strlen(name) - 3, "[*]", 3)) {
+        int i;
+        ObjectProperty *ret;
+        char *name_no_array = g_strdup(name);
+
+        name_no_array[strlen(name) - 3] = '\0';
+        for (i = 0; ; ++i) {
+            char *full_name = g_strdup_printf("%s[%d]", name_no_array, i);
+            Error *local_err = NULL;
+            ret = object_property_add(obj, full_name, type, get, set,
+                                      release, opaque, &local_err);
+
+            g_free(full_name);
+            if (!local_err) {
+                break;
+            }
+            error_free(local_err);
+        }
+        g_free(name_no_array);
+        return ret;
+    }
+
     QTAILQ_FOREACH(prop, &obj->properties, node) {
         if (strcmp(prop->name, name) == 0) {
             error_setg(errp, "attempt to add duplicate property '%s'"
-- 
2.0.1.1.gfbfc394

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-07-31  9:38 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-31  5:34 [Qemu-devel] [PATCH qom v1 1/2] qom: object_property_add: Add automatic arrayification Peter Crosthwaite
2014-07-31  5:35 ` [Qemu-devel] [PATCH qom v1 2/2] memory: remove object_property_add_child_array Peter Crosthwaite
2014-07-31  9:38   ` Paolo Bonzini
2014-07-31  9:38 ` [Qemu-devel] [PATCH qom v1 1/2] qom: object_property_add: Add automatic arrayification Paolo Bonzini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.