From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Mz9SN-0005os-TG for qemu-devel@nongnu.org; Sat, 17 Oct 2009 09:36:28 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Mz9SH-0005l7-PC for qemu-devel@nongnu.org; Sat, 17 Oct 2009 09:36:25 -0400 Received: from [199.232.76.173] (port=58968 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Mz9SH-0005ky-3G for qemu-devel@nongnu.org; Sat, 17 Oct 2009 09:36:21 -0400 Received: from e31.co.us.ibm.com ([32.97.110.149]:39392) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Mz9SG-0000Ot-OD for qemu-devel@nongnu.org; Sat, 17 Oct 2009 09:36:20 -0400 Received: from d03relay02.boulder.ibm.com (d03relay02.boulder.ibm.com [9.17.195.227]) by e31.co.us.ibm.com (8.14.3/8.13.1) with ESMTP id n9HDTg1u026561 for ; Sat, 17 Oct 2009 07:29:42 -0600 Received: from d03av04.boulder.ibm.com (d03av04.boulder.ibm.com [9.17.195.170]) by d03relay02.boulder.ibm.com (8.13.8/8.13.8/NCO v9.1) with ESMTP id n9HDaFn7263602 for ; Sat, 17 Oct 2009 07:36:15 -0600 Received: from d03av04.boulder.ibm.com (loopback [127.0.0.1]) by d03av04.boulder.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id n9HDaFKu021676 for ; Sat, 17 Oct 2009 07:36:15 -0600 From: Anthony Liguori Date: Sat, 17 Oct 2009 08:36:10 -0500 Message-Id: <1255786571-3528-11-git-send-email-aliguori@us.ibm.com> In-Reply-To: <1255786571-3528-1-git-send-email-aliguori@us.ibm.com> References: <1255786571-3528-1-git-send-email-aliguori@us.ibm.com> Subject: [Qemu-devel] [PATCH 10/11] qjson: add vararg format for embedded qobjects List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Anthony Liguori %p lets you specify an already constructed qobject. It takes a weak reference. Signed-off-by: Anthony Liguori --- 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