Eric Blake <ebl...@redhat.com> writes: > 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 <programmingk...@gmail.com> > Signed-off-by: Eric Blake <ebl...@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;
The name value64 isn't quite right anymore. value_ll? > 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);