[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 10/11] qjson: add vararg format for embedded qobject
From: |
Anthony Liguori |
Subject: |
[Qemu-devel] [PATCH 10/11] qjson: add vararg format for embedded qobjects |
Date: |
Sat, 17 Oct 2009 08:36:10 -0500 |
%p lets you specify an already constructed qobject. It takes a weak reference.
Signed-off-by: Anthony Liguori <address@hidden>
---
qjson.c | 25 +++++++++++++++++++++++++
1 files changed, 25 insertions(+), 0 deletions(-)
diff --git a/qjson.c b/qjson.c
index 9279bfb..7bedaf3 100644
--- a/qjson.c
+++ b/qjson.c
@@ -648,6 +648,28 @@ static QObject *parse_keyword(JSONParserContext *ctxt,
const char *data, size_t
return obj;
}
+static QObject *parse_qobject(JSONParserContext *ctxt, const char *data,
size_t *length, va_list *ap)
+{
+ const char *ptr = data;
+ QObject *obj = NULL;
+
+ ptr += parse_skip(ctxt, ptr);
+
+ if (ap && *ptr == '%') {
+ ptr++;
+ if (*ptr == 'p') {
+ ptr++;
+
+ obj = va_arg(*ap, QObject *);
+ qobject_incref(obj);
+ *length = (ptr - data);
+ return obj;
+ }
+ }
+
+ return NULL;
+}
+
static QObject *parse_value(JSONParserContext *ctxt, const char *string,
size_t *length, va_list *ap)
{
QObject *obj;
@@ -665,6 +687,9 @@ static QObject *parse_value(JSONParserContext *ctxt, const
char *string, size_t
if (obj == NULL) {
obj = parse_keyword(ctxt, string, length);
}
+ if (obj == NULL) {
+ obj = parse_qobject(ctxt, string, length, ap);
+ }
return obj;
}
--
1.6.2.5
- [Qemu-devel] [PATCH 04/11] Add json->qobject parser, (continued)
- [Qemu-devel] [PATCH 05/11] Add unit test for json parser, Anthony Liguori, 2009/10/17
- [Qemu-devel] [PATCH 09/11] qjson: add unit test for varargs bool parsing, Anthony Liguori, 2009/10/17
- [Qemu-devel] [PATCH 10/11] qjson: add vararg format for embedded qobjects,
Anthony Liguori <=
- [Qemu-devel] [PATCH 11/11] qjson: add unit test to check %p format, Anthony Liguori, 2009/10/17
- Re: [Qemu-devel] [PATCH 0/11] json parser (v2), Luiz Capitulino, 2009/10/18