diff options
author | Markus Armbruster | 2018-08-23 18:40:18 +0200 |
---|---|---|
committer | Markus Armbruster | 2018-08-24 20:26:37 +0200 |
commit | abe7c2067c21a89c6fd4cf2d8ba2fa37160d1d55 (patch) | |
tree | 9b47fe3f0c5dc56c37c6ba9ef7072ea6d7276706 /qobject | |
parent | json: Unbox tokens queue in JSONMessageParser (diff) | |
download | qemu-abe7c2067c21a89c6fd4cf2d8ba2fa37160d1d55.tar.gz qemu-abe7c2067c21a89c6fd4cf2d8ba2fa37160d1d55.tar.xz qemu-abe7c2067c21a89c6fd4cf2d8ba2fa37160d1d55.zip |
json: Make JSONToken opaque outside json-parser.c
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <20180823164025.12553-52-armbru@redhat.com>
Diffstat (limited to 'qobject')
-rw-r--r-- | qobject/json-parser.c | 19 | ||||
-rw-r--r-- | qobject/json-streamer.c | 8 |
2 files changed, 20 insertions, 7 deletions
diff --git a/qobject/json-parser.c b/qobject/json-parser.c index e9a9f937f3..a247875f14 100644 --- a/qobject/json-parser.c +++ b/qobject/json-parser.c @@ -26,6 +26,13 @@ #include "qapi/qmp/json-lexer.h" #include "qapi/qmp/json-streamer.h" +struct JSONToken { + JSONTokenType type; + int x; + int y; + char str[]; +}; + typedef struct JSONParserContext { Error *err; @@ -538,6 +545,18 @@ static QObject *parse_value(JSONParserContext *ctxt, va_list *ap) } } +JSONToken *json_token(JSONTokenType type, int x, int y, GString *tokstr) +{ + JSONToken *token = g_malloc(sizeof(JSONToken) + tokstr->len + 1); + + token->type = type; + memcpy(token->str, tokstr->str, tokstr->len); + token->str[tokstr->len] = 0; + token->x = x; + token->y = y; + return token; +} + QObject *json_parser_parse(GQueue *tokens, va_list *ap, Error **errp) { JSONParserContext ctxt = { .buf = tokens }; diff --git a/qobject/json-streamer.c b/qobject/json-streamer.c index 9210281a65..467bc29413 100644 --- a/qobject/json-streamer.c +++ b/qobject/json-streamer.c @@ -82,13 +82,7 @@ void json_message_process_token(JSONLexer *lexer, GString *input, goto out_emit; } - token = g_malloc(sizeof(JSONToken) + input->len + 1); - token->type = type; - memcpy(token->str, input->str, input->len); - token->str[input->len] = 0; - token->x = x; - token->y = y; - + token = json_token(type, x, y, input); parser->token_size += input->len; g_queue_push_tail(&parser->tokens, token); |