qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH] JSON: add %I64d support (Was: Re: [Qemu-devel] system_reset


From: Anthony Liguori
Subject: Re: [PATCH] JSON: add %I64d support (Was: Re: [Qemu-devel] system_reset command cause assert failed)
Date: Wed, 10 Feb 2010 13:28:42 -0600
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091209 Fedora/3.0-4.fc12 Lightning/1.0pre Thunderbird/3.0

On 02/03/2010 08:30 PM, Roy Tam wrote:
2010/2/4 Roy Tam<address@hidden>:
2010/2/3 Luiz Capitulino<address@hidden>:
OK we are fooled by the json lexer and parser. As we use %I64d to
print 'long long' variables in Win32, but lexer and parser only deal
with %lld but not %I64d, this patch add support for %I64d and solve
'info pci', 'powser_reset' and 'power_powerdown' assert failure in
Win32.

P.S.: an assert(state.result != NULL) statement in
qobject_from_jsonv() will be good for asserting failure of parsing
JSON strings.


Applied.  Thanks.

Regards,

Anthony Liguori

diff --git a/json-lexer.c b/json-lexer.c
index 53697c5..9d64920 100644
--- a/json-lexer.c
+++ b/json-lexer.c
@@ -54,6 +54,9 @@ enum json_lexer_state {
      IN_ESCAPE,
      IN_ESCAPE_L,
      IN_ESCAPE_LL,
+    IN_ESCAPE_I,
+    IN_ESCAPE_I6,
+    IN_ESCAPE_I64,
      IN_ESCAPE_DONE,
      IN_WHITESPACE,
      IN_OPERATOR_DONE,
@@ -223,6 +226,18 @@ static const uint8_t json_lexer[][256] =  {
          ['l'] = IN_ESCAPE_LL,
      },

+    [IN_ESCAPE_I64] = {
+        ['d'] = IN_ESCAPE_DONE,
+    },
+
+    [IN_ESCAPE_I6] = {
+        ['4'] = IN_ESCAPE_I64,
+    },
+
+    [IN_ESCAPE_I] = {
+        ['6'] = IN_ESCAPE_I6,
+    },
+
      [IN_ESCAPE] = {
          ['d'] = IN_ESCAPE_DONE,
          ['i'] = IN_ESCAPE_DONE,
@@ -230,6 +245,7 @@ static const uint8_t json_lexer[][256] =  {
          ['s'] = IN_ESCAPE_DONE,
          ['f'] = IN_ESCAPE_DONE,
          ['l'] = IN_ESCAPE_L,
+        ['I'] = IN_ESCAPE_I,
      },

      /* top level rule */
diff --git a/json-parser.c b/json-parser.c
index e04932f..40a5d15 100644
--- a/json-parser.c
+++ b/json-parser.c
@@ -474,7 +474,7 @@ static QObject *parse_escape(JSONParserContext
*ctxt, QList **tokens, va_list *a
          obj = QOBJECT(qint_from_int(va_arg(*ap, int)));
      } else if (token_is_escape(token, "%ld")) {
          obj = QOBJECT(qint_from_int(va_arg(*ap, long)));
-    } else if (token_is_escape(token, "%lld")) {
+    } else if (token_is_escape(token, "%lld") ||
token_is_escape(token, "%I64d")) {
          obj = QOBJECT(qint_from_int(va_arg(*ap, long long)));
      } else if (token_is_escape(token, "%s")) {
          obj = QOBJECT(qstring_from_str(va_arg(*ap, const char *)));








reply via email to

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