From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42732) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c9OzC-0001Oh-NK for qemu-devel@nongnu.org; Tue, 22 Nov 2016 23:16:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c9OzB-00020w-1l for qemu-devel@nongnu.org; Tue, 22 Nov 2016 23:16:42 -0500 Received: from mx1.redhat.com ([209.132.183.28]:50112) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1c9OzA-00020B-OZ for qemu-devel@nongnu.org; Tue, 22 Nov 2016 23:16:40 -0500 From: Eric Blake Date: Tue, 22 Nov 2016 22:16:28 -0600 Message-Id: <1479874588-1969-4-git-send-email-eblake@redhat.com> In-Reply-To: <1479874588-1969-1-git-send-email-eblake@redhat.com> References: <1479874588-1969-1-git-send-email-eblake@redhat.com> Subject: [Qemu-devel] [PATCH 3/3] qapi: Drop support for qobject_from_jsonf("%"PRId64) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: programmingkidx@gmail.com, armbru@redhat.com, pbonzini@redhat.com, Michael Roth 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 printf(). In particular, any use of a 64-bit integer works only if the system's definition of PRId64 matches what the parser expects; which works on glibc (%lld) and mingw (%I64d), but not on Mac OS (%qd). Rather than enhance the parser, we have already converted almost all clients to use an alternative method; convert or eliminate the remaining uses in the testsuite, and rip out this code from the parser. Ripping it all out means that we will now uniformly get failures on all platforms that try to use dynamic JSON with 64-bit numbers. Ultimately, I plan for later patches to rip out dynamic JSON altogether, but that is more invasive and therefore not appropriate for the 2.8 release, while this patch fixes an actual testsuite failure of check-qjson on Mac OS. Reported by: G 3 Signed-off-by: Eric Blake --- qobject/json-lexer.c | 28 ---------------------------- qobject/json-parser.c | 5 ----- tests/check-qjson.c | 10 ---------- tests/test-qobject-input-visitor.c | 5 +++-- 4 files changed, 3 insertions(+), 45 deletions(-) diff --git a/qobject/json-lexer.c b/qobject/json-lexer.c index af4a75e..b175da7 100644 --- a/qobject/json-lexer.c +++ b/qobject/json-lexer.c @@ -59,11 +59,6 @@ enum json_lexer_state { IN_NEG_NONZERO_NUMBER, IN_KEYWORD, IN_ESCAPE, - IN_ESCAPE_L, - IN_ESCAPE_LL, - IN_ESCAPE_I, - IN_ESCAPE_I6, - IN_ESCAPE_I64, IN_WHITESPACE, IN_START, }; @@ -225,35 +220,12 @@ static const uint8_t json_lexer[][256] = { }, /* escape */ - [IN_ESCAPE_LL] = { - ['d'] = JSON_ESCAPE, - }, - - [IN_ESCAPE_L] = { - ['d'] = JSON_ESCAPE, - ['l'] = IN_ESCAPE_LL, - }, - - [IN_ESCAPE_I64] = { - ['d'] = JSON_ESCAPE, - }, - - [IN_ESCAPE_I6] = { - ['4'] = IN_ESCAPE_I64, - }, - - [IN_ESCAPE_I] = { - ['6'] = IN_ESCAPE_I6, - }, - [IN_ESCAPE] = { ['d'] = JSON_ESCAPE, ['i'] = JSON_ESCAPE, ['p'] = JSON_ESCAPE, ['s'] = JSON_ESCAPE, ['f'] = JSON_ESCAPE, - ['l'] = IN_ESCAPE_L, - ['I'] = IN_ESCAPE_I, }, /* top level rule */ diff --git a/qobject/json-parser.c b/qobject/json-parser.c index c18e48a..492d141 100644 --- a/qobject/json-parser.c +++ b/qobject/json-parser.c @@ -467,11 +467,6 @@ static QObject *parse_escape(JSONParserContext *ctxt, va_list *ap) return QOBJECT(qbool_from_bool(va_arg(*ap, int))); } else if (!strcmp(token->str, "%d")) { return QOBJECT(qint_from_int(va_arg(*ap, int))); - } else if (!strcmp(token->str, "%ld")) { - return QOBJECT(qint_from_int(va_arg(*ap, long))); - } else if (!strcmp(token->str, "%lld") || - !strcmp(token->str, "%I64d")) { - return QOBJECT(qint_from_int(va_arg(*ap, long long))); } else if (!strcmp(token->str, "%s")) { return QOBJECT(qstring_from_str(va_arg(*ap, const char *))); } else if (!strcmp(token->str, "%f")) { diff --git a/tests/check-qjson.c b/tests/check-qjson.c index 8595574..7149a92 100644 --- a/tests/check-qjson.c +++ b/tests/check-qjson.c @@ -964,7 +964,6 @@ static void vararg_number(void) QInt *qint; QFloat *qfloat; int value = 0x2342; - int64_t value64 = 0x2342342343LL; double valuef = 2.323423423; obj = qobject_from_jsonf("%d", value); @@ -976,15 +975,6 @@ static void vararg_number(void) QDECREF(qint); - obj = qobject_from_jsonf("%" PRId64, value64); - g_assert(obj != NULL); - g_assert(qobject_type(obj) == QTYPE_QINT); - - qint = qobject_to_qint(obj); - g_assert(qint_get_int(qint) == value64); - - QDECREF(qint); - obj = qobject_from_jsonf("%f", valuef); g_assert(obj != NULL); g_assert(qobject_type(obj) == QTYPE_QFLOAT); 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