From: Eric Blake <eblake@redhat.com>
To: qemu-devel@nongnu.org
Cc: programmingkidx@gmail.com, armbru@redhat.com,
pbonzini@redhat.com, Michael Roth <mdroth@linux.vnet.ibm.com>
Subject: [Qemu-devel] [PATCH v2 3/4] tests: Avoid qobject_from_jsonf("%"PRId64)
Date: Wed, 23 Nov 2016 11:36:56 -0600 [thread overview]
Message-ID: <1479922617-4400-4-git-send-email-eblake@redhat.com> (raw)
In-Reply-To: <1479922617-4400-1-git-send-email-eblake@redhat.com>
The qobject_from_jsonf() function implements a pseudo-printf
language for creating a QObject; however, it is hard-coded to
only parse a subset of formats understood by -Wformat, and is
not a straight synonym to bare printf(). In particular, any
use of an int64_t integer works only if the system's
definition of PRId64 matches what the parser expects; which
works on glibc (%lld or %ld depending on 32- vs. 64-bit) and
mingw (%I64d), but not on Mac OS (%qd). Rather than enhance
the parser, it is just as easy to force the use of int (where
the value is small enough) or long long instead of int64_t,
which we know always works.
This should cover all remaining testsuite uses of
qobject_from_json[fv]() that were trying to rely on PRId64,
although my proof for that was done by adding in asserts and
checking that 'make check' still passed, where such asserts
are inappropriate during hard freeze. A later series in 2.9
may remove all dynamic JSON parsing, but that's a bigger task.
Reported by: G 3 <programmingkidx@gmail.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
---
tests/check-qjson.c | 4 ++--
tests/test-qobject-input-visitor.c | 5 +++--
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/tests/check-qjson.c b/tests/check-qjson.c
index 8595574..b03a2e1 100644
--- a/tests/check-qjson.c
+++ b/tests/check-qjson.c
@@ -964,7 +964,7 @@ static void vararg_number(void)
QInt *qint;
QFloat *qfloat;
int value = 0x2342;
- int64_t value64 = 0x2342342343LL;
+ long long value64 = 0x2342342343LL;
double valuef = 2.323423423;
obj = qobject_from_jsonf("%d", value);
@@ -976,7 +976,7 @@ static void vararg_number(void)
QDECREF(qint);
- obj = qobject_from_jsonf("%" PRId64, value64);
+ obj = qobject_from_jsonf("%lld", value64);
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QINT);
diff --git a/tests/test-qobject-input-visitor.c b/tests/test-qobject-input-visitor.c
index 26c5012..945404a 100644
--- a/tests/test-qobject-input-visitor.c
+++ b/tests/test-qobject-input-visitor.c
@@ -83,10 +83,11 @@ static Visitor *visitor_input_test_init_raw(TestInputVisitorData *data,
static void test_visitor_in_int(TestInputVisitorData *data,
const void *unused)
{
- int64_t res = 0, value = -42;
+ int64_t res = 0;
+ int value = -42;
Visitor *v;
- v = visitor_input_test_init(data, "%" PRId64, value);
+ v = visitor_input_test_init(data, "%d", value);
visit_type_int(v, NULL, &res, &error_abort);
g_assert_cmpint(res, ==, value);
--
2.7.4
next prev parent reply other threads:[~2016-11-23 17:37 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-23 17:36 [Qemu-devel] [PATCH v2 for-2.8 0/4] Fix MacOS runtime failure of qobject_from_jsonf() Eric Blake
2016-11-23 17:36 ` [Qemu-devel] [PATCH v2 1/4] qmp-event: Avoid qobject_from_jsonf("%"PRId64) Eric Blake
2016-11-24 11:00 ` Markus Armbruster
2016-11-24 16:34 ` Eric Blake
2016-11-23 17:36 ` [Qemu-devel] [PATCH v2 2/4] test-qga: Avoid qobject_from_jsonv("%"PRId64) Eric Blake
2016-11-23 17:36 ` Eric Blake [this message]
2016-11-24 11:03 ` [Qemu-devel] [PATCH v2 3/4] tests: Avoid qobject_from_jsonf("%"PRId64) Markus Armbruster
2016-11-23 17:36 ` [Qemu-devel] [PATCH v2 4/4] RFC: qapi: Drop support for qobject_from_jsonf("%"PRId64) Eric Blake
2016-11-24 11:07 ` [Qemu-devel] [PATCH v2 for-2.8 0/4] Fix MacOS runtime failure of qobject_from_jsonf() Markus Armbruster
2016-11-24 16:32 ` Eric Blake
2016-11-25 8:59 ` Markus Armbruster
2016-11-25 11:56 ` Stefan Hajnoczi
2016-11-29 8:20 ` no-reply
2016-11-29 9:33 ` Markus Armbruster
2016-12-05 16:55 ` Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1479922617-4400-4-git-send-email-eblake@redhat.com \
--to=eblake@redhat.com \
--cc=armbru@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=pbonzini@redhat.com \
--cc=programmingkidx@gmail.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).