[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 1/6] object: add object_property_add_bool
From: |
Anthony Liguori |
Subject: |
[Qemu-devel] [PATCH 1/6] object: add object_property_add_bool |
Date: |
Mon, 15 Oct 2012 14:34:12 -0500 |
Signed-off-by: Anthony Liguori <address@hidden>
---
include/qemu/object.h | 17 ++++++++++++++
qom/object.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 75 insertions(+), 0 deletions(-)
diff --git a/include/qemu/object.h b/include/qemu/object.h
index cc75fee..f4dc2ea 100644
--- a/include/qemu/object.h
+++ b/include/qemu/object.h
@@ -947,6 +947,23 @@ void object_property_add_str(Object *obj, const char *name,
struct Error **errp);
/**
+ * object_property_add_bool:
+ * @obj: the object to add a property to
+ * @name: the name of the property
+ * @get: the getter or NULL if the property is write-only. This function must
+ * return a string to be freed by g_free().
+ * @set: the setter or NULL if the property is read-only
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Add a bool property using getters/setters. This function will add a
+ * property of type 'bool'.
+ */
+void object_property_add_bool(Object *obj, const char *name,
+ bool (*get)(Object *, struct Error **),
+ void (*set)(Object *, bool, struct Error **),
+ struct Error **errp);
+
+/**
* object_child_foreach:
* @obj: the object whose children will be navigated
* @fn: the iterator function to be called
diff --git a/qom/object.c b/qom/object.c
index e3e9242..efa25ee 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -1183,6 +1183,64 @@ void object_property_add_str(Object *obj, const char
*name,
prop, errp);
}
+typedef struct BoolProperty
+{
+ bool (*get)(Object *, Error **);
+ void (*set)(Object *, bool, Error **);
+} BoolProperty;
+
+static void property_get_bool(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ BoolProperty *prop = opaque;
+ bool value;
+
+ value = prop->get(obj, errp);
+ if (value) {
+ visit_type_bool(v, &value, name, errp);
+ }
+}
+
+static void property_set_bool(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ BoolProperty *prop = opaque;
+ Error *local_err = NULL;
+ bool value;
+
+ visit_type_bool(v, &value, name, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+
+ prop->set(obj, value, errp);
+}
+
+static void property_release_bool(Object *obj, const char *name,
+ void *opaque)
+{
+ BoolProperty *prop = opaque;
+ g_free(prop);
+}
+
+void object_property_add_bool(Object *obj, const char *name,
+ bool (*get)(Object *, Error **),
+ void (*set)(Object *, bool, Error **),
+ Error **errp)
+{
+ BoolProperty *prop = g_malloc0(sizeof(*prop));
+
+ prop->get = get;
+ prop->set = set;
+
+ object_property_add(obj, name, "bool",
+ get ? property_get_bool : NULL,
+ set ? property_set_bool : NULL,
+ property_release_bool,
+ prop, errp);
+}
+
static char *qdev_get_type(Object *obj, Error **errp)
{
return g_strdup(object_get_typename(obj));
--
1.7.5.4
- [Qemu-devel] [RFC PATCH 0/6] chardev: convert to QOM, Anthony Liguori, 2012/10/15
- [Qemu-devel] [PATCH 1/6] object: add object_property_add_bool,
Anthony Liguori <=
- [Qemu-devel] [PATCH 5/6] chardev: switch the easy backends to realize, Anthony Liguori, 2012/10/15
- [Qemu-devel] [PATCH 3/6] chardev: create new QOM types for each sub chardev type, Anthony Liguori, 2012/10/15
- [Qemu-devel] [PATCH 6/6] chardev: convert file backend to realize, Anthony Liguori, 2012/10/15
- [Qemu-devel] [PATCH 2/6] chardev: convert to QOM (shallow pass), Anthony Liguori, 2012/10/15
- [Qemu-devel] [PATCH 4/6] chardev: implement realize, Anthony Liguori, 2012/10/15
- Re: [Qemu-devel] [RFC PATCH 0/6] chardev: convert to QOM, Gerd Hoffmann, 2012/10/17