object: add object_property_add_bool (v2)
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> --- v1 -> v2 - Fix whitespace (Andreas Faerber)
This commit is contained in:
parent
68d98d3e42
commit
0e5588438d
@ -946,6 +946,22 @@ void object_property_add_str(Object *obj, const char *name,
|
||||
void (*set)(Object *, const char *, struct Error **),
|
||||
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.
|
||||
* @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
|
||||
|
56
qom/object.c
56
qom/object.c
@ -1183,6 +1183,62 @@ 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);
|
||||
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;
|
||||
bool value;
|
||||
Error *local_err = NULL;
|
||||
|
||||
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));
|
||||
|
Loading…
Reference in New Issue
Block a user