Commit b2cd7dee authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

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: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 2d7799f2
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -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
+25 −0
Original line number Diff line number Diff line
@@ -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);