[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 27/58] json: Simplify parse_string()
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL 27/58] json: Simplify parse_string() |
Date: |
Fri, 24 Aug 2018 21:31:35 +0200 |
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>
---
qobject/json-parser.c | 42 +++++++++++++++++++-----------------------
1 file changed, 19 insertions(+), 23 deletions(-)
diff --git a/qobject/json-parser.c b/qobject/json-parser.c
index 7437827c24..9cb363f7e1 100644
--- a/qobject/json-parser.c
+++ b/qobject/json-parser.c
@@ -101,8 +101,7 @@ static int hex2decimal(char ch)
} else if (ch >= 'A' && ch <= 'F') {
return 10 + (ch - 'A');
}
-
- return -1;
+ abort();
}
/**
@@ -144,7 +143,7 @@ static QString *parse_string(JSONParserContext *ctxt,
JSONToken *token)
const char *ptr = token->str;
QString *str;
char quote;
- int cp;
+ int cp, i;
char *end;
ssize_t len;
char utf8_buf[5];
@@ -159,51 +158,48 @@ static QString *parse_string(JSONParserContext *ctxt,
JSONToken *token)
ptr++;
switch (*ptr++) {
case '"':
- qstring_append(str, "\"");
+ qstring_append_chr(str, '"');
break;
case '\'':
- qstring_append(str, "'");
+ qstring_append_chr(str, '\'');
break;
case '\\':
- qstring_append(str, "\\");
+ qstring_append_chr(str, '\\');
break;
case '/':
- qstring_append(str, "/");
+ qstring_append_chr(str, '/');
break;
case 'b':
- qstring_append(str, "\b");
+ qstring_append_chr(str, '\b');
break;
case 'f':
- qstring_append(str, "\f");
+ qstring_append_chr(str, '\f');
break;
case 'n':
- qstring_append(str, "\n");
+ qstring_append_chr(str, '\n');
break;
case 'r':
- qstring_append(str, "\r");
+ qstring_append_chr(str, '\r');
break;
case 't':
- qstring_append(str, "\t");
+ qstring_append_chr(str, '\t');
break;
- case 'u': {
- uint16_t unicode_char = 0;
- char utf8_char[4];
- int i = 0;
-
+ case 'u':
+ cp = 0;
for (i = 0; i < 4; i++) {
- if (qemu_isxdigit(*ptr)) {
- unicode_char |= hex2decimal(*ptr) << ((3 - i) * 4);
- } else {
+ if (!qemu_isxdigit(*ptr)) {
parse_error(ctxt, token,
"invalid hex escape sequence in string");
goto out;
}
+ cp <<= 4;
+ cp |= hex2decimal(*ptr);
ptr++;
}
- wchar_to_utf8(unicode_char, utf8_char, sizeof(utf8_char));
- qstring_append(str, utf8_char);
- } break;
+ wchar_to_utf8(cp, utf8_buf, sizeof(utf8_buf));
+ qstring_append(str, utf8_buf);
+ break;
default:
parse_error(ctxt, token, "invalid escape sequence in string");
goto out;
--
2.17.1
- [Qemu-devel] [PULL 16/58] check-qjson: Cover interpolation more thoroughly, (continued)
- [Qemu-devel] [PULL 16/58] check-qjson: Cover interpolation more thoroughly, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 10/58] check-qjson: Cover escaped characters more thoroughly, part 2, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 30/58] check-qjson: Fix and enable utf8_string()'s disabled part, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 28/58] json: Reject invalid \uXXXX, fix \u0000, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 39/58] json: Pass lexical errors and limit violations to callback, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 19/58] json: Revamp lexer documentation, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 23/58] json: Report first rather than last parse error, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 24/58] json: Leave rejecting invalid UTF-8 to parser, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 05/58] qmp-cmd-test: Split off qmp-test, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 22/58] json: Reject invalid UTF-8 sequences, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 27/58] json: Simplify parse_string(),
Markus Armbruster <=
- [Qemu-devel] [PULL 09/58] check-qjson: Streamline escaped_string()'s test strings, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 35/58] json: Don't pass null @tokens to json_parser_parse(), Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 37/58] json: Rename token JSON_ESCAPE & friends to JSON_INTERP, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 34/58] json: Redesign the callback to consume JSON values, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 08/58] check-qjson: Cover escaped characters more thoroughly, part 1, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 21/58] check-qjson: Document we expect invalid UTF-8 to be rejected, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 31/58] json: remove useless return value from lexer/parser, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 14/58] check-qjson: Fix utf8_string() to test all invalid sequences, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 29/58] json: Fix \uXXXX for surrogate pairs, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 26/58] json: Leave rejecting invalid escape sequences to parser, Markus Armbruster, 2018/08/24