[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH 19/24] qapi: Improve how keyval input visitor report
From: |
Markus Armbruster |
Subject: |
[Qemu-block] [PATCH 19/24] qapi: Improve how keyval input visitor reports unexpected dicts |
Date: |
Mon, 27 Feb 2017 12:20:45 +0100 |
Incorrect option
-blockdev node-name=foo,driver=file,filename=foo.img,aio.unmap
is rejected with "Invalid parameter type for 'aio', expected: string".
To make sense of this, you almost have to translate it into the
equivalent QMP command
{ "execute": "blockdev-add", "arguments": { "node-name": "foo", "driver":
"file", "filename": "foo.img", "aio": { "unmap": true } } }
Improve the error message to "Parameters 'aio.*' are unexpected".
Take care not to confuse the case "unexpected nested parameters"
(i.e. the object is a QDict or QList) with the case "non-string scalar
parameter". The latter is a misuse of the visitor, and should perhaps
be an assertion. Note that test-qobject-input-visitor exercises this
misuse in test_visitor_in_int_keyval(), test_visitor_in_bool_keyval()
and test_visitor_in_number_keyval().
Signed-off-by: Markus Armbruster <address@hidden>
---
qapi/qobject-input-visitor.c | 26 ++++++++++++++++++++++----
1 file changed, 22 insertions(+), 4 deletions(-)
diff --git a/qapi/qobject-input-visitor.c b/qapi/qobject-input-visitor.c
index 64a08d3..1d7b420 100644
--- a/qapi/qobject-input-visitor.c
+++ b/qapi/qobject-input-visitor.c
@@ -167,9 +167,18 @@ static const char
*qobject_input_get_keyval(QObjectInputVisitor *qiv,
qstr = qobject_to_qstring(qobj);
if (!qstr) {
- error_setg(errp, QERR_INVALID_PARAMETER_TYPE,
- full_name(qiv, name), "string");
- return NULL;
+ switch (qobject_type(qobj)) {
+ case QTYPE_QDICT:
+ case QTYPE_QLIST:
+ error_setg(errp, "Parameters '%s.*' are unexpected",
+ full_name(qiv, name));
+ return NULL;
+ default:
+ /* Non-string scalar (should this be an assertion?) */
+ error_setg(errp, "Internal error: parameter %s invalid",
+ full_name(qiv, name));
+ return NULL;
+ }
}
return qstring_get_str(qstr);
@@ -478,6 +487,15 @@ static void qobject_input_type_str(Visitor *v, const char
*name, char **obj,
*obj = g_strdup(qstring_get_str(qstr));
}
+static void qobject_input_type_str_keyval(Visitor *v, const char *name,
+ char **obj, Error **errp)
+{
+ QObjectInputVisitor *qiv = to_qiv(v);
+ const char *str = qobject_input_get_keyval(qiv, name, errp);
+
+ *obj = g_strdup(str);
+}
+
static void qobject_input_type_number(Visitor *v, const char *name, double
*obj,
Error **errp)
{
@@ -649,7 +667,7 @@ Visitor *qobject_input_visitor_new_keyval(QObject *obj)
v->visitor.type_int64 = qobject_input_type_int64_keyval;
v->visitor.type_uint64 = qobject_input_type_uint64_keyval;
v->visitor.type_bool = qobject_input_type_bool_keyval;
- v->visitor.type_str = qobject_input_type_str;
+ v->visitor.type_str = qobject_input_type_str_keyval;
v->visitor.type_number = qobject_input_type_number_keyval;
v->visitor.type_any = qobject_input_type_any;
v->visitor.type_null = qobject_input_type_null;
--
2.7.4
- [Qemu-block] [PATCH 13/24] block: More detailed syntax error reporting for JSON filenames, (continued)
- [Qemu-block] [PATCH 13/24] block: More detailed syntax error reporting for JSON filenames, Markus Armbruster, 2017/02/27
- [Qemu-block] [PATCH 06/24] qapi: Factor out common part of qobject input visitor creation, Markus Armbruster, 2017/02/27
- [Qemu-block] [PATCH 11/24] test-qobject-input-visitor: Abort earlier on bad test input, Markus Armbruster, 2017/02/27
- [Qemu-block] [PATCH 02/24] tests: Fix gcov-files-test-qemu-opts-y, gcov-files-test-logging-y, Markus Armbruster, 2017/02/27
- [Qemu-block] [PATCH 08/24] qobject: Propagate parse errors through qobject_from_jsonv(), Markus Armbruster, 2017/02/27
- [Qemu-block] [PATCH 19/24] qapi: Improve how keyval input visitor reports unexpected dicts,
Markus Armbruster <=
- [Qemu-block] [PATCH 12/24] qobject: Propagate parse errors through qobject_from_json(), Markus Armbruster, 2017/02/27
- [Qemu-block] [PATCH 22/24] qapi: New parse_qapi_name(), Markus Armbruster, 2017/02/27