mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
Testing patches for 2018-08-16
-----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJbdTcjAAoJEDhwtADrkYZTZEYP/ivp0ozEfMeGgc6PFItv3zmx QVD+NYJ8bnv/iEoWl/pnQ0/HY3YLHz4G1DTK0dSlJAvAiChpPiR7YCeJRXeTyLHL 9KCFQV5SV9llstVi0f4ebEK21mUkYWoqtlzxxyqXh0q2N/QLtaVQ85ysE6ufwhNH jlunmJLGRRwPR95F4a05uVHNOym1ig9eo5CtQ1Fa8viV9BgWTbpSp1t4feB1OLnt Ml9cbFubb1cA7CuhdNHazNOnRZtEW5A9eOo6rX4d5JcH/zgFWdPpKCRn/X/NdvSE aRKqk7ll0gxYlacqVpkea23pVKVl7e1oUqkziaL8rq/BYE0SePkRv+SnmsifD8uT kWl+eHLyaW1g43omc0uttyAuTkFnvAa+l9TqIrdEYcPJJNaCsZVgJpDvj9+Oxril fk3OIHAnzSWwp/AmFLCSOYdaoVuZhppp6rqnu26B0w9Rxkbqe1790LbjDJrLUB+2 vN7+JmDhUfJk7/2pi+MGZrBtj3zcgbb3Qc5+NG8H1401bA/n8FNnPKgWdmAlmO7i pTafa1FXArJGWiBhzg2PUqmZq45MQiheQ1+SWgviIodQX5oHB3kEimcRPg4Wk18c fTKJDe7w8NFFNjuH6ou2LI4KzgQeewW+oCjxh2A7kwCqDmq5Eq8nBw/bYO1DgcDr bfCnicNJinjCHcgvvCVM =DuZ8 -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/armbru/tags/pull-tests-2018-08-16' into staging Testing patches for 2018-08-16 # gpg: Signature made Thu 16 Aug 2018 09:34:43 BST # gpg: using RSA key 3870B400EB918653 # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * remotes/armbru/tags/pull-tests-2018-08-16: (25 commits) libqtest: Improve error reporting for bad read from QEMU tests/libqtest: Improve kill_qemu() libqtest: Rename qtest_FOOv() to qtest_vFOO() for consistency libqtest: Replace qtest_startf() by qtest_initf() libqtest: Enable compile-time format string checking migration-test: Clean up string interpolation into QMP, part 3 migration-test: Clean up string interpolation into QMP, part 2 migration-test: Clean up string interpolation into QMP, part 1 migration-test: Make wait_command() cope with '%' tests: New helper qtest_qmp_receive_success() migration-test: Make wait_command() return the "return" member tests: Clean up string interpolation around qtest_qmp_device_add() cpu-plug-test: Don't pass integers as strings to device_add tests: Clean up string interpolation into QMP input (simple cases) tests: Pass literal format strings directly to qmp_FOO() qobject: qobject_from_jsonv() is dangerous, hide it away test-qobject-input-visitor: Avoid format string ambiguity libqtest: Simplify qmp_fd_vsend() a bit qobject: New qobject_from_vjsonf_nofail(), qdict_from_vjsonf_nofail() qobject: Replace qobject_from_jsonf() by qobject_from_jsonf_nofail() ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
c542a9f979
51 changed files with 572 additions and 554 deletions
|
@ -39,7 +39,18 @@ static void parse_json(JSONMessageParser *parser, GQueue *tokens)
|
|||
s->result = json_parser_parse_err(tokens, s->ap, &s->err);
|
||||
}
|
||||
|
||||
QObject *qobject_from_jsonv(const char *string, va_list *ap, Error **errp)
|
||||
/*
|
||||
* Parse @string as JSON value.
|
||||
* If @ap is non-null, interpolate %-escapes.
|
||||
* Takes ownership of %p arguments.
|
||||
* On success, return the JSON value.
|
||||
* On failure, store an error through @errp and return NULL.
|
||||
* Ownership of %p arguments becomes indeterminate then. To avoid
|
||||
* leaks, callers passing %p must terminate on error, e.g. by passing
|
||||
* &error_abort.
|
||||
*/
|
||||
static QObject *qobject_from_jsonv(const char *string, va_list *ap,
|
||||
Error **errp)
|
||||
{
|
||||
JSONParsingState state = {};
|
||||
|
||||
|
@ -59,18 +70,56 @@ QObject *qobject_from_json(const char *string, Error **errp)
|
|||
return qobject_from_jsonv(string, NULL, errp);
|
||||
}
|
||||
|
||||
QObject *qobject_from_jsonf(const char *string, ...)
|
||||
/*
|
||||
* Parse @string as JSON value with %-escapes interpolated.
|
||||
* Abort on error. Do not use with untrusted @string.
|
||||
* Return the resulting QObject. It is never null.
|
||||
*/
|
||||
QObject *qobject_from_vjsonf_nofail(const char *string, va_list ap)
|
||||
{
|
||||
va_list ap_copy;
|
||||
QObject *obj;
|
||||
|
||||
/* va_copy() is needed when va_list is an array type */
|
||||
va_copy(ap_copy, ap);
|
||||
obj = qobject_from_jsonv(string, &ap_copy, &error_abort);
|
||||
va_end(ap_copy);
|
||||
|
||||
assert(obj);
|
||||
return obj;
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse @string as JSON value with %-escapes interpolated.
|
||||
* Abort on error. Do not use with untrusted @string.
|
||||
* Return the resulting QObject. It is never null.
|
||||
*/
|
||||
QObject *qobject_from_jsonf_nofail(const char *string, ...)
|
||||
{
|
||||
QObject *obj;
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, string);
|
||||
obj = qobject_from_jsonv(string, &ap, &error_abort);
|
||||
obj = qobject_from_vjsonf_nofail(string, ap);
|
||||
va_end(ap);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse @string as JSON object with %-escapes interpolated.
|
||||
* Abort on error. Do not use with untrusted @string.
|
||||
* Return the resulting QDict. It is never null.
|
||||
*/
|
||||
QDict *qdict_from_vjsonf_nofail(const char *string, va_list ap)
|
||||
{
|
||||
QDict *qdict;
|
||||
|
||||
qdict = qobject_to(QDict, qobject_from_vjsonf_nofail(string, ap));
|
||||
assert(qdict);
|
||||
return qdict;
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse @string as JSON object with %-escapes interpolated.
|
||||
* Abort on error. Do not use with untrusted @string.
|
||||
|
@ -78,15 +127,13 @@ QObject *qobject_from_jsonf(const char *string, ...)
|
|||
*/
|
||||
QDict *qdict_from_jsonf_nofail(const char *string, ...)
|
||||
{
|
||||
QDict *obj;
|
||||
QDict *qdict;
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, string);
|
||||
obj = qobject_to(QDict, qobject_from_jsonv(string, &ap, &error_abort));
|
||||
qdict = qdict_from_vjsonf_nofail(string, ap);
|
||||
va_end(ap);
|
||||
|
||||
assert(obj);
|
||||
return obj;
|
||||
return qdict;
|
||||
}
|
||||
|
||||
typedef struct ToJsonIterState
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue