Sometimes is not enough to get property's value, but it is needed to know if the value was actually set.
This is especially useful when querying bool properties and having different defaults on different scenarios. Signed-off-by: Marcel Apfelbaum <marce...@redhat.com> --- include/qom/object.h | 11 +++++++++++ qom/object.c | 12 ++++++++++++ 2 files changed, 23 insertions(+) diff --git a/include/qom/object.h b/include/qom/object.h index 9c7c361..4a4f026 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -319,6 +319,7 @@ typedef struct ObjectProperty { gchar *name; gchar *type; + bool is_set; ObjectPropertyAccessor *get; ObjectPropertyAccessor *set; ObjectPropertyRelease *release; @@ -931,6 +932,16 @@ void object_property_set(Object *obj, struct Visitor *v, const char *name, Error **errp); /** + * object_property_is_set: + * @obj: the object + * @name: the name of the property + * @errp: returns an error if this function fails + * + * Returns: true if object's property is set, false otherwise. + */ +bool object_property_is_set(Object *obj, const char *name, + Error **errp); +/** * object_property_parse: * @obj: the object * @string: the string that will be used to parse the property value. diff --git a/qom/object.c b/qom/object.c index 660859c..5b9d8af 100644 --- a/qom/object.c +++ b/qom/object.c @@ -817,9 +817,21 @@ void object_property_set(Object *obj, Visitor *v, const char *name, error_set(errp, QERR_PERMISSION_DENIED); } else { prop->set(obj, v, prop->opaque, name, errp); + prop->is_set = true; } } +bool object_property_is_set(Object *obj, const char *name, + Error **errp) +{ + ObjectProperty *prop = object_property_find(obj, name, errp); + if (prop == NULL) { + return false; + } + + return prop->is_set; +} + void object_property_set_str(Object *obj, const char *value, const char *name, Error **errp) { -- 1.8.3.1