qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 2/9] qom: add object_property_add_unnamed_child


From: Michael Roth
Subject: [Qemu-devel] [PATCH 2/9] qom: add object_property_add_unnamed_child
Date: Fri, 3 May 2013 11:03:45 -0500

This interface allows us to add a child property without specifying a
name. Instead, a unique name is created and passed back after adding
the property.

Signed-off-by: Michael Roth <address@hidden>
---
 include/qom/object.h |   16 ++++++++++++++++
 qom/object.c         |   25 +++++++++++++++++++++++++
 2 files changed, 41 insertions(+)

diff --git a/include/qom/object.h b/include/qom/object.h
index 86f1e2e..ca0fce8 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -1041,6 +1041,22 @@ void object_property_add_child(Object *obj, const char 
*name,
                                Object *child, struct Error **errp);
 
 /**
+ * object_property_add_unnamed_child:
+ *
+ * @obj: the object to add a property to
+ * @name: the name of the property
+ * @child: the child object
+ * @errp: if an error occurs, a pointer to an area to store the area
+ *
+ * Same as object_property_add_child, but will allocate a unique name to
+ * identify the child property.
+ *
+ * Returns: The name assigned to the child property, or NULL on failure.
+ */
+char *object_property_add_unnamed_child(Object *obj, Object *child,
+                                        struct Error **errp);
+
+/**
  * object_property_add_link:
  * @obj: the object to add a property to
  * @name: the name of the property
diff --git a/qom/object.c b/qom/object.c
index c932f64..229a9a7 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -926,6 +926,31 @@ static void object_finalize_child_property(Object *obj, 
const char *name,
     object_unref(child);
 }
 
+char *object_property_add_unnamed_child(Object *obj, Object *child, Error 
**errp)
+{
+    int idx = 0;
+    bool next_idx_found = false;
+    char name[64];
+    ObjectProperty *prop;
+
+    while (!next_idx_found) {
+        sprintf(name, "unnamed[%d]", idx);
+        QTAILQ_FOREACH(prop, &obj->properties, node) {
+            if (strcmp(name, prop->name) == 0) {
+                idx++;
+                break;
+            }
+        }
+        if (!prop) {
+            next_idx_found = true;
+        }
+    }
+
+    object_property_add_child(obj, name, child, errp);
+
+    return error_is_set(errp) ? NULL : g_strdup(name);
+}
+
 void object_property_add_child(Object *obj, const char *name,
                                Object *child, Error **errp)
 {
-- 
1.7.9.5




reply via email to

[Prev in Thread] Current Thread [Next in Thread]