aboutsummaryrefslogtreecommitdiffstats
path: root/json-parser.c
diff options
context:
space:
mode:
authorDavid Turner <digit@android.com>2010-09-09 22:59:04 +0200
committerDavid 'Digit' Turner <digit@android.com>2010-09-13 00:30:34 -0700
commit9a5f7cee50272ec12fe23452cb2638bee8c35374 (patch)
tree1949c7dad6c2ddd2b8de01e8fe0c1429f0ef979f /json-parser.c
parent75fb4a08de4abce11ee7cf81bcddd5193eb0438d (diff)
downloadexternal_qemu-9a5f7cee50272ec12fe23452cb2638bee8c35374.zip
external_qemu-9a5f7cee50272ec12fe23452cb2638bee8c35374.tar.gz
external_qemu-9a5f7cee50272ec12fe23452cb2638bee8c35374.tar.bz2
upstream: json update.
Diffstat (limited to 'json-parser.c')
-rw-r--r--json-parser.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/json-parser.c b/json-parser.c
index f3debcb..70b9b6f 100644
--- a/json-parser.c
+++ b/json-parser.c
@@ -11,7 +11,7 @@
*
*/
-#include <stdbool.h>
+#include <stdarg.h>
#include "qemu-common.h"
#include "qstring.h"
@@ -93,7 +93,12 @@ static int token_is_escape(QObject *obj, const char *value)
*/
static void parse_error(JSONParserContext *ctxt, QObject *token, const char *msg, ...)
{
- fprintf(stderr, "parse error: %s\n", msg);
+ va_list ap;
+ va_start(ap, msg);
+ fprintf(stderr, "parse error: ");
+ vfprintf(stderr, msg, ap);
+ fprintf(stderr, "\n");
+ va_end(ap);
}
/**
@@ -200,6 +205,10 @@ static QString *qstring_from_escaped_str(JSONParserContext *ctxt, QObject *token
qstring_append(str, "\b");
ptr++;
break;
+ case 'f':
+ qstring_append(str, "\f");
+ ptr++;
+ break;
case 'n':
qstring_append(str, "\n");
ptr++;
@@ -264,7 +273,7 @@ static int parse_pair(JSONParserContext *ctxt, QDict *dict, QList **tokens, va_l
peek = qlist_peek(working);
key = parse_value(ctxt, &working, ap);
- if (qobject_type(key) != QTYPE_QSTRING) {
+ if (!key || qobject_type(key) != QTYPE_QSTRING) {
parse_error(ctxt, peek, "key is not a string in object");
goto out;
}