[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 05/47] qlit: move qlit from check-qjson to qobject/
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL 05/47] qlit: move qlit from check-qjson to qobject/ |
Date: |
Fri, 1 Sep 2017 14:55:29 +0200 |
From: Marc-André Lureau <address@hidden>
Fix code style issues while at it, to please checkpatch.
Signed-off-by: Marc-André Lureau <address@hidden>
Reviewed-by: Markus Armbruster <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Markus Armbruster <address@hidden>
---
include/qapi/qmp/qlit.h | 49 +++++++++++++++++++++++++
qobject/Makefile.objs | 2 +-
qobject/qlit.c | 89 +++++++++++++++++++++++++++++++++++++++++++++
tests/check-qjson.c | 96 +------------------------------------------------
4 files changed, 140 insertions(+), 96 deletions(-)
create mode 100644 include/qapi/qmp/qlit.h
create mode 100644 qobject/qlit.c
diff --git a/include/qapi/qmp/qlit.h b/include/qapi/qmp/qlit.h
new file mode 100644
index 0000000000..280db5064a
--- /dev/null
+++ b/include/qapi/qmp/qlit.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright IBM, Corp. 2009
+ * Copyright (c) 2013, 2015, 2017 Red Hat Inc.
+ *
+ * Authors:
+ * Anthony Liguori <address@hidden>
+ * Markus Armbruster <address@hidden>
+ * Marc-André Lureau <address@hidden>
+ *
+ * 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 QLIT_H
+#define QLIT_H
+
+#include "qapi-types.h"
+#include "qobject.h"
+
+typedef struct LiteralQDictEntry LiteralQDictEntry;
+typedef struct LiteralQObject LiteralQObject;
+
+struct LiteralQObject {
+ int type;
+ union {
+ int64_t qnum;
+ const char *qstr;
+ LiteralQDictEntry *qdict;
+ LiteralQObject *qlist;
+ } value;
+};
+
+struct LiteralQDictEntry {
+ const char *key;
+ LiteralQObject value;
+};
+
+#define QLIT_QNUM(val) \
+ (LiteralQObject){.type = QTYPE_QNUM, .value.qnum = (val)}
+#define QLIT_QSTR(val) \
+ (LiteralQObject){.type = QTYPE_QSTRING, .value.qstr = (val)}
+#define QLIT_QDICT(val) \
+ (LiteralQObject){.type = QTYPE_QDICT, .value.qdict = (val)}
+#define QLIT_QLIST(val) \
+ (LiteralQObject){.type = QTYPE_QLIST, .value.qlist = (val)}
+
+int compare_litqobj_to_qobj(LiteralQObject *lhs, QObject *rhs);
+
+#endif /* QLIT_H */
diff --git a/qobject/Makefile.objs b/qobject/Makefile.objs
index fc8885c9a4..002d25873a 100644
--- a/qobject/Makefile.objs
+++ b/qobject/Makefile.objs
@@ -1,2 +1,2 @@
-util-obj-y = qnull.o qnum.o qstring.o qdict.o qlist.o qbool.o
+util-obj-y = qnull.o qnum.o qstring.o qdict.o qlist.o qbool.o qlit.o
util-obj-y += qjson.o qobject.o json-lexer.o json-streamer.o json-parser.o
diff --git a/qobject/qlit.c b/qobject/qlit.c
new file mode 100644
index 0000000000..5917c3584e
--- /dev/null
+++ b/qobject/qlit.c
@@ -0,0 +1,89 @@
+/*
+ * QLit literal qobject
+ *
+ * Copyright IBM, Corp. 2009
+ * Copyright (c) 2013, 2015, 2017 Red Hat Inc.
+ *
+ * Authors:
+ * Anthony Liguori <address@hidden>
+ * Markus Armbruster <address@hidden>
+ * Marc-André Lureau <address@hidden>
+ *
+ * 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 "qemu/osdep.h"
+
+#include "qapi/qmp/qlit.h"
+#include "qapi/qmp/types.h"
+
+typedef struct QListCompareHelper {
+ int index;
+ LiteralQObject *objs;
+ int result;
+} QListCompareHelper;
+
+static void compare_helper(QObject *obj, void *opaque)
+{
+ QListCompareHelper *helper = opaque;
+
+ if (helper->result == 0) {
+ return;
+ }
+
+ if (helper->objs[helper->index].type == QTYPE_NONE) {
+ helper->result = 0;
+ return;
+ }
+
+ helper->result =
+ compare_litqobj_to_qobj(&helper->objs[helper->index++], obj);
+}
+
+int compare_litqobj_to_qobj(LiteralQObject *lhs, QObject *rhs)
+{
+ int64_t val;
+
+ if (!rhs || lhs->type != qobject_type(rhs)) {
+ return 0;
+ }
+
+ switch (lhs->type) {
+ case QTYPE_QNUM:
+ g_assert(qnum_get_try_int(qobject_to_qnum(rhs), &val));
+ return lhs->value.qnum == val;
+ case QTYPE_QSTRING:
+ return (strcmp(lhs->value.qstr,
+ qstring_get_str(qobject_to_qstring(rhs))) == 0);
+ case QTYPE_QDICT: {
+ int i;
+
+ for (i = 0; lhs->value.qdict[i].key; i++) {
+ QObject *obj = qdict_get(qobject_to_qdict(rhs),
+ lhs->value.qdict[i].key);
+
+ if (!compare_litqobj_to_qobj(&lhs->value.qdict[i].value, obj)) {
+ return 0;
+ }
+ }
+
+ return 1;
+ }
+ case QTYPE_QLIST: {
+ QListCompareHelper helper;
+
+ helper.index = 0;
+ helper.objs = lhs->value.qlist;
+ helper.result = 1;
+
+ qlist_iter(qobject_to_qlist(rhs), compare_helper, &helper);
+
+ return helper.result;
+ }
+ default:
+ break;
+ }
+
+ return 0;
+}
diff --git a/tests/check-qjson.c b/tests/check-qjson.c
index a3a97b0d99..525f79e60b 100644
--- a/tests/check-qjson.c
+++ b/tests/check-qjson.c
@@ -16,6 +16,7 @@
#include "qapi/error.h"
#include "qapi/qmp/types.h"
#include "qapi/qmp/qjson.h"
+#include "qapi/qmp/qlit.h"
#include "qemu-common.h"
static void escaped_string(void)
@@ -1059,101 +1060,6 @@ static void keyword_literal(void)
QDECREF(null);
}
-typedef struct LiteralQDictEntry LiteralQDictEntry;
-typedef struct LiteralQObject LiteralQObject;
-
-struct LiteralQObject
-{
- int type;
- union {
- int64_t qnum;
- const char *qstr;
- LiteralQDictEntry *qdict;
- LiteralQObject *qlist;
- } value;
-};
-
-struct LiteralQDictEntry
-{
- const char *key;
- LiteralQObject value;
-};
-
-#define QLIT_QNUM(val) (LiteralQObject){.type = QTYPE_QNUM, .value.qnum =
(val)}
-#define QLIT_QSTR(val) (LiteralQObject){.type = QTYPE_QSTRING, .value.qstr =
(val)}
-#define QLIT_QDICT(val) (LiteralQObject){.type = QTYPE_QDICT, .value.qdict =
(val)}
-#define QLIT_QLIST(val) (LiteralQObject){.type = QTYPE_QLIST, .value.qlist =
(val)}
-
-typedef struct QListCompareHelper
-{
- int index;
- LiteralQObject *objs;
- int result;
-} QListCompareHelper;
-
-static int compare_litqobj_to_qobj(LiteralQObject *lhs, QObject *rhs);
-
-static void compare_helper(QObject *obj, void *opaque)
-{
- QListCompareHelper *helper = opaque;
-
- if (helper->result == 0) {
- return;
- }
-
- if (helper->objs[helper->index].type == QTYPE_NONE) {
- helper->result = 0;
- return;
- }
-
- helper->result = compare_litqobj_to_qobj(&helper->objs[helper->index++],
obj);
-}
-
-static int compare_litqobj_to_qobj(LiteralQObject *lhs, QObject *rhs)
-{
- int64_t val;
-
- if (!rhs || lhs->type != qobject_type(rhs)) {
- return 0;
- }
-
- switch (lhs->type) {
- case QTYPE_QNUM:
- g_assert(qnum_get_try_int(qobject_to_qnum(rhs), &val));
- return lhs->value.qnum == val;
- case QTYPE_QSTRING:
- return (strcmp(lhs->value.qstr,
qstring_get_str(qobject_to_qstring(rhs))) == 0);
- case QTYPE_QDICT: {
- int i;
-
- for (i = 0; lhs->value.qdict[i].key; i++) {
- QObject *obj = qdict_get(qobject_to_qdict(rhs),
lhs->value.qdict[i].key);
-
- if (!compare_litqobj_to_qobj(&lhs->value.qdict[i].value, obj)) {
- return 0;
- }
- }
-
- return 1;
- }
- case QTYPE_QLIST: {
- QListCompareHelper helper;
-
- helper.index = 0;
- helper.objs = lhs->value.qlist;
- helper.result = 1;
-
- qlist_iter(qobject_to_qlist(rhs), compare_helper, &helper);
-
- return helper.result;
- }
- default:
- break;
- }
-
- return 0;
-}
-
static void simple_dict(void)
{
int i;
--
2.13.5
- [Qemu-devel] [PULL 00/47] QAPI patches for 2017-09-01, Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 04/47] qdict: Add qdict_put_null() helper, and put it to use, Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 16/47] qapi-schema: Document how generated documentation is ordered, Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 14/47] qlit: Tighten QLit dict vs QDict comparison, Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 01/47] qapi: Fix error handling code on alternate conflict, Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 03/47] qobject: Explain how QNum works, and why, Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 13/47] tests/check-qlit: New, covering qobject/qlit.c, Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 05/47] qlit: move qlit from check-qjson to qobject/,
Markus Armbruster <=
- [Qemu-devel] [PULL 17/47] qapi-schema: Introspection doc is in the wrong section, fix, Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 10/47] qlit: make qlit_equal_qobject() take const arguments, Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 29/47] qapi-schema: Make block-core.json self-contained, Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 07/47] qlit: Change compound literals to initializers, Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 31/47] qapi-schema: Improve section headings, Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 41/47] qapi: Use qapi_enum_parse() in input_type_enum(), Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 06/47] qlit: use QLit prefix consistently, Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 32/47] qapi: Update qapi-code-gen.txt examples to match current code, Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 26/47] qapi-schema: Collect TPM stuff in qapi/tpm.json, Markus Armbruster, 2017/09/01
- [Qemu-devel] [PULL 18/47] qapi-schema: Rocker doc section contains unrelated stuff, fix, Markus Armbruster, 2017/09/01