Am 09.02.2012 15:31, schrieb Paolo Bonzini: > Add generic property accessors that take a string and parse it > appropriately for the property type. All the magic here is done > by the new string-based visitors. > > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- > include/qemu/object.h | 24 ++++++++++++++++++++++++ > qom/object.c | 24 ++++++++++++++++++++++++ > 2 files changed, 48 insertions(+), 0 deletions(-) > > diff --git a/include/qemu/object.h b/include/qemu/object.h > index 7d50da9..af071eb 100644 > --- a/include/qemu/object.h > +++ b/include/qemu/object.h > @@ -730,6 +730,30 @@ void object_property_set(Object *obj, struct Visitor *v, > const char *name, > struct Error **errp); > > /** > + * object_property_parse: > + * @obj: the object > + * @string: the string that will be used to parse the property value. > + * @name: the name of the property > + * @errp: returns an error if this function fails > + * > + * Parses a string and writes the result into a property of an object. > + */ > +void object_property_parse(Object *obj, const char *string, > + const char *name, struct Error **errp); > + > +/** > + * object_property_set: > + * @obj: the object > + * @name: the name of the property > + * @errp: returns an error if this function fails > + * > + * Returns a string representation of the value of the property. The
* Returns: for gtk-doc. > + * caller shall free the string. > + */ > +char *object_property_print(Object *obj, const char *name, > + struct Error **errp); > + > +/** > * @object_property_get_type: (This non-PULL version will conflict here.) > * @obj: the object > * @name: the name of the property > diff --git a/qom/object.c b/qom/object.c > index 5e5b261..97d898f 100644 > --- a/qom/object.c > +++ b/qom/object.c > @@ -782,6 +784,28 @@ int64_t object_property_get_int(Object *obj, const char > *name, > return retval; > } > > +void object_property_parse(Object *obj, const char *string, > + const char *name, Error **errp) > +{ > + StringInputVisitor *mi; Curious: where does mi/mo come from? > + mi = string_input_visitor_new(string); > + object_property_set(obj, string_input_get_visitor(mi), name, errp); > + > + string_input_visitor_cleanup(mi); > +} > + > +char *object_property_print(Object *obj, const char *name, > + Error **errp) > +{ > + StringOutputVisitor *mo; > + char *string; > + > + mo = string_output_visitor_new(); > + object_property_get(obj, string_output_get_visitor(mo), name, NULL); > + string = string_output_get_string(mo); > + string_output_visitor_cleanup(mo); > + return string; > +} Empty line please. Otherwise Liked-by: Andreas Färber <afaer...@suse.de> > const char *object_property_get_type(Object *obj, const char *name, Error > **errp) > { > ObjectProperty *prop = object_property_find(obj, name); Andreas -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg