mirror of
https://github.com/mii443/qemu.git
synced 2025-08-22 15:15:46 +00:00
qapi: New qobject_input_visitor_new_str() for convenience
Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <1488317230-26248-21-git-send-email-armbru@redhat.com>
This commit is contained in:
@ -18,9 +18,11 @@
|
||||
#include "qapi/visitor-impl.h"
|
||||
#include "qemu/queue.h"
|
||||
#include "qemu-common.h"
|
||||
#include "qapi/qmp/qjson.h"
|
||||
#include "qapi/qmp/types.h"
|
||||
#include "qapi/qmp/qerror.h"
|
||||
#include "qemu/cutils.h"
|
||||
#include "qemu/option.h"
|
||||
|
||||
typedef struct StackObject {
|
||||
const char *name; /* Name of @obj in its parent, if any */
|
||||
@ -656,3 +658,37 @@ Visitor *qobject_input_visitor_new_keyval(QObject *obj)
|
||||
|
||||
return &v->visitor;
|
||||
}
|
||||
|
||||
Visitor *qobject_input_visitor_new_str(const char *str,
|
||||
const char *implied_key,
|
||||
Error **errp)
|
||||
{
|
||||
bool is_json = str[0] == '{';
|
||||
QObject *obj;
|
||||
QDict *args;
|
||||
Visitor *v;
|
||||
|
||||
if (is_json) {
|
||||
obj = qobject_from_json(str, errp);
|
||||
if (!obj) {
|
||||
/* Work around qobject_from_json() lossage TODO fix that */
|
||||
if (errp && !*errp) {
|
||||
error_setg(errp, "JSON parse error");
|
||||
return NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
args = qobject_to_qdict(obj);
|
||||
assert(args);
|
||||
v = qobject_input_visitor_new(QOBJECT(args));
|
||||
} else {
|
||||
args = keyval_parse(str, implied_key, errp);
|
||||
if (!args) {
|
||||
return NULL;
|
||||
}
|
||||
v = qobject_input_visitor_new_keyval(QOBJECT(args));
|
||||
}
|
||||
QDECREF(args);
|
||||
|
||||
return v;
|
||||
}
|
||||
|
Reference in New Issue
Block a user