qemu-e2k/qobject
Eric Blake e549e7161f json-parser: Accept 'null' in QMP
We document that in QMP, the client may send any json-value
for the optional "id" key, and then return that same value
on reply (both success and failures, insofar as the failure
happened after parsing the id).  [Note that the output may
not be identical to the input, as whitespace may change and
since we may reorder keys within a json-object, but that this
still constitutes the same json-value].  However, we were not
handling the JSON literal null, which counts as a json-value
per RFC 7159.

Also, down the road, given the QAPI schema of {'*foo':'str'} or
{'*foo':'ComplexType'}, we could decide to allow the QMP client
to pass { "foo":null } instead of the current representation of
{ } where omitting the key is the only way to get at the default
NULL value.  Such a change might be useful for argument
introspection (if a type in older qemu lacks 'foo' altogether,
then an explicit "foo":null probe will force an easily
distinguished error message for whether the optional "foo" key
is even understood in newer qemu).  And if we add default values
to optional arguments, allowing an explicit null would be
required for getting a NULL value associated with an optional
string that has a non-null default.  But all that can come at a
later day.

The 'check-unit' testsuite is enhanced to test that parsing
produces the same object as explicitly requesting a reference
to the special qnull object.  In addition, I tested with:

$ ./x86_64-softmmu/qemu-system-x86_64 -qmp stdio -nodefaults
{"QMP": {"version": {"qemu": {"micro": 91, "minor": 2, "major": 2}, "package": ""}, "capabilities": []}}
{"execute":"qmp_capabilities","id":null}
{"return": {}, "id": null}
{"id":{"a":null,"b":[1,null]},"execute":"quit"}
{"return": {}, "id": {"a": null, "b": [1, null]}}
{"timestamp": {"seconds": 1427742379, "microseconds": 423128}, "event": "SHUTDOWN"}

Signed-off-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
2015-05-11 08:59:07 -04:00
..
Makefile.objs qobject: Add a special null QObject 2015-05-11 08:59:07 -04:00
json-lexer.c json-lexer: fix escaped backslash in single-quoted string 2014-06-23 11:01:24 -04:00
json-parser.c json-parser: Accept 'null' in QMP 2015-05-11 08:59:07 -04:00
json-streamer.c build: move qobject files to qobject/ and libqemuutil.a 2013-01-12 18:42:50 +01:00
qbool.c build: move qobject files to qobject/ and libqemuutil.a 2013-01-12 18:42:50 +01:00
qdict.c qdict: Add qdict_join() 2014-05-19 11:36:48 +02:00
qerror.c qerror: Remove assert_no_error() 2014-01-06 15:02:30 -05:00
qfloat.c build: move qobject files to qobject/ and libqemuutil.a 2013-01-12 18:42:50 +01:00
qint.c build: move qobject files to qobject/ and libqemuutil.a 2013-01-12 18:42:50 +01:00
qjson.c qobject: Add a special null QObject 2015-05-11 08:59:07 -04:00
qlist.c build: move qobject files to qobject/ and libqemuutil.a 2013-01-12 18:42:50 +01:00
qnull.c qobject: Add a special null QObject 2015-05-11 08:59:07 -04:00
qstring.c qstring: add qstring_get_length() 2013-04-05 08:42:29 -04:00