qom: add generic string parsing/printing

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 <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2012-02-09 09:52:59 +01:00
parent 2d7799f2cc
commit b2cd7dee86
2 changed files with 49 additions and 0 deletions

View File

@ -729,6 +729,30 @@ int64_t object_property_get_int(Object *obj, const char *name,
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_print:
* @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
* caller shall free the string.
*/
char *object_property_print(Object *obj, const char *name,
struct Error **errp);
/**
* object_property_get_type:
* @obj: the object

View File

@ -13,6 +13,8 @@
#include "qemu/object.h"
#include "qemu-common.h"
#include "qapi/qapi-visit-core.h"
#include "qapi/string-input-visitor.h"
#include "qapi/string-output-visitor.h"
/* TODO: replace QObject with a simpler visitor to avoid a dependency
* of the QOM core on QObject? */
@ -782,6 +784,29 @@ 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;
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;
}
const char *object_property_get_type(Object *obj, const char *name, Error **errp)
{
ObjectProperty *prop = object_property_find(obj, name);