qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 3/4] tests: Avoid qobject_from_jsonf("%"PRId6


From: Markus Armbruster
Subject: Re: [Qemu-devel] [PATCH v2 3/4] tests: Avoid qobject_from_jsonf("%"PRId64)
Date: Thu, 24 Nov 2016 12:03:58 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

Eric Blake <address@hidden> 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 <address@hidden>
> Signed-off-by: Eric Blake <address@hidden>
> ---
>  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);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]