From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Mz9SM-0005oP-Iv for qemu-devel@nongnu.org; Sat, 17 Oct 2009 09:36:26 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Mz9SG-0005ke-Ok for qemu-devel@nongnu.org; Sat, 17 Oct 2009 09:36:25 -0400 Received: from [199.232.76.173] (port=58964 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Mz9SF-0005kR-V6 for qemu-devel@nongnu.org; Sat, 17 Oct 2009 09:36:20 -0400 Received: from e37.co.us.ibm.com ([32.97.110.158]:49404) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Mz9SF-0000OV-Ef for qemu-devel@nongnu.org; Sat, 17 Oct 2009 09:36:19 -0400 Received: from d03relay04.boulder.ibm.com (d03relay04.boulder.ibm.com [9.17.195.106]) by e37.co.us.ibm.com (8.14.3/8.13.1) with ESMTP id n9HDZBfi023746 for ; Sat, 17 Oct 2009 07:35:11 -0600 Received: from d03av04.boulder.ibm.com (d03av04.boulder.ibm.com [9.17.195.170]) by d03relay04.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id n9HDaEvn174340 for ; Sat, 17 Oct 2009 07:36:14 -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 n9HDaEZa021564 for ; Sat, 17 Oct 2009 07:36:14 -0600 From: Anthony Liguori Date: Sat, 17 Oct 2009 08:36:06 -0500 Message-Id: <1255786571-3528-7-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 06/11] qobject: add QBool type List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Anthony Liguori We currently model as json bool as an int. This works fine on the server side but it means we cannot send back proper bools to the client. Introducing a proper QBool type fixes that. Signed-off-by: Anthony Liguori --- Makefile | 2 +- qbool.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ qbool.h | 29 +++++++++++++++++++++++ qobject.h | 1 + 4 files changed, 107 insertions(+), 1 deletions(-) create mode 100644 qbool.c create mode 100644 qbool.h diff --git a/Makefile b/Makefile index 8b80150..095d2ce 100644 --- a/Makefile +++ b/Makefile @@ -125,7 +125,7 @@ obj-y += net.o net-queue.o obj-y += qemu-char.o aio.o net-checksum.o savevm.o obj-y += msmouse.o ps2.o obj-y += qdev.o qdev-properties.o -obj-y += qint.o qstring.o qdict.o qlist.o qfloat.o qjson.o +obj-y += qint.o qstring.o qdict.o qlist.o qfloat.o qbool.o qjson.o obj-y += qemu-config.o obj-$(CONFIG_BRLAPI) += baum.o diff --git a/qbool.c b/qbool.c new file mode 100644 index 0000000..5ab734c --- /dev/null +++ b/qbool.c @@ -0,0 +1,76 @@ +/* + * QBool Module + * + * Copyright (C) 2009 Red Hat Inc. + * + * Authors: + * Luiz Capitulino + * + * This work is licensed under the terms of the GNU GPL, version 2. See + * the COPYING file in the top-level directory. + * + * Copyright IBM, Corp. 2009 + * + * Authors: + * Anthony Liguori + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. + * + */ + +#include "qbool.h" +#include "qobject.h" +#include "qemu-common.h" + +static void qbool_destroy_obj(QObject *obj); + +static const QType qbool_type = { + .code = QTYPE_QBOOL, + .destroy = qbool_destroy_obj, +}; + +/** + * qbool_from_int(): Create a new QBool from an int + * + * Return strong reference. + */ +QBool *qbool_from_int(int value) +{ + QBool *qb; + + qb = qemu_malloc(sizeof(*qb)); + qb->value = value; + QOBJECT_INIT(qb, &qbool_type); + + return qb; +} + +/** + * qbool_get_int(): Get the stored int + */ +int qbool_get_int(const QBool *qb) +{ + return qb->value; +} + +/** + * qobject_to_qbool(): Convert a QObject into a QBool + */ +QBool *qobject_to_qbool(const QObject *obj) +{ + if (qobject_type(obj) != QTYPE_QBOOL) + return NULL; + + return container_of(obj, QBool, base); +} + +/** + * qbool_destroy_obj(): Free all memory allocated by a + * QBool object + */ +static void qbool_destroy_obj(QObject *obj) +{ + assert(obj != NULL); + qemu_free(qobject_to_qbool(obj)); +} diff --git a/qbool.h b/qbool.h new file mode 100644 index 0000000..fe66fcd --- /dev/null +++ b/qbool.h @@ -0,0 +1,29 @@ +/* + * QBool Module + * + * Copyright IBM, Corp. 2009 + * + * Authors: + * Anthony Liguori + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. + * + */ + +#ifndef QBOOL_H +#define QBOOL_H + +#include +#include "qobject.h" + +typedef struct QBool { + QObject_HEAD; + int value; +} QBool; + +QBool *qbool_from_int(int value); +int qbool_get_int(const QBool *qb); +QBool *qobject_to_qbool(const QObject *obj); + +#endif /* QBOOL_H */ diff --git a/qobject.h b/qobject.h index da03a5e..167b607 100644 --- a/qobject.h +++ b/qobject.h @@ -42,6 +42,7 @@ typedef enum { QTYPE_QDICT, QTYPE_QLIST, QTYPE_QFLOAT, + QTYPE_QBOOL, } qtype_code; struct QObject; -- 1.6.2.5