[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
- [Qemu-devel] [RFC 0/9] QContext: QOM class to support multiple event loops, Michael Roth, 2013/05/03
- [Qemu-devel] [PATCH 2/9] qom: add object_property_add_unnamed_child,
Michael Roth <=
- [Qemu-devel] [PATCH 1/9] qom: add qom_init_completion, Michael Roth, 2013/05/03
- [Qemu-devel] [PATCH 3/9] QSource: QEMU event source object, Michael Roth, 2013/05/03
- [Qemu-devel] [PATCH 5/9] GlibQContext: a QContext wrapper around GMainContexts, Michael Roth, 2013/05/03
- [Qemu-devel] [PATCH 4/9] QContext: QEMU event loop context, abstract base class, Michael Roth, 2013/05/03
- [Qemu-devel] [PATCH 6/9] QContext: add unit tests, Michael Roth, 2013/05/03