yeahuh / rpms / qemu-kvm

Forked from rpms/qemu-kvm 2 years ago
Clone

Blame SOURCES/kvm-qapi-Add-consume-argument-to-qmp_input_get_object.patch

9ae3a8
From adef92fecbb5d4e37e5e513954c088f9f1704418 Mon Sep 17 00:00:00 2001
9ae3a8
From: Kevin Wolf <kwolf@redhat.com>
9ae3a8
Date: Mon, 9 Sep 2013 14:28:13 +0200
9ae3a8
Subject: [PATCH 22/38] qapi: Add consume argument to qmp_input_get_object()
9ae3a8
9ae3a8
RH-Author: Kevin Wolf <kwolf@redhat.com>
9ae3a8
Message-id: <1378736903-18489-23-git-send-email-kwolf@redhat.com>
9ae3a8
Patchwork-id: 54209
9ae3a8
O-Subject: [RHEL-7.0 qemu-kvm PATCH 22/32] qapi: Add consume argument to qmp_input_get_object()
9ae3a8
Bugzilla: 1005818
9ae3a8
RH-Acked-by: Fam Zheng <famz@redhat.com>
9ae3a8
RH-Acked-by: Max Reitz <mreitz@redhat.com>
9ae3a8
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
9ae3a8
9ae3a8
Bugzilla: 1005818
9ae3a8
9ae3a8
This allows to just look at the next element without actually consuming
9ae3a8
it.
9ae3a8
9ae3a8
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
9ae3a8
Reviewed-by: Eric Blake <eblake@redhat.com>
9ae3a8
(cherry picked from commit e8316d7e8e8339a9ea593ba821a0aad26908c0d5)
9ae3a8
9ae3a8
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
9ae3a8
---
9ae3a8
 qapi/qmp-input-visitor.c | 19 ++++++++++---------
9ae3a8
 1 file changed, 10 insertions(+), 9 deletions(-)
9ae3a8
9ae3a8
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
9ae3a8
---
9ae3a8
 qapi/qmp-input-visitor.c |   19 ++++++++++---------
9ae3a8
 1 files changed, 10 insertions(+), 9 deletions(-)
9ae3a8
9ae3a8
diff --git a/qapi/qmp-input-visitor.c b/qapi/qmp-input-visitor.c
9ae3a8
index 59c5cac..70864a1 100644
9ae3a8
--- a/qapi/qmp-input-visitor.c
9ae3a8
+++ b/qapi/qmp-input-visitor.c
9ae3a8
@@ -41,13 +41,14 @@ static QmpInputVisitor *to_qiv(Visitor *v)
9ae3a8
 }
9ae3a8
 
9ae3a8
 static QObject *qmp_input_get_object(QmpInputVisitor *qiv,
9ae3a8
-                                     const char *name)
9ae3a8
+                                     const char *name,
9ae3a8
+                                     bool consume)
9ae3a8
 {
9ae3a8
     QObject *qobj = qiv->stack[qiv->nb_stack - 1].obj;
9ae3a8
 
9ae3a8
     if (qobj) {
9ae3a8
         if (name && qobject_type(qobj) == QTYPE_QDICT) {
9ae3a8
-            if (qiv->stack[qiv->nb_stack - 1].h) {
9ae3a8
+            if (qiv->stack[qiv->nb_stack - 1].h && consume) {
9ae3a8
                 g_hash_table_remove(qiv->stack[qiv->nb_stack - 1].h, name);
9ae3a8
             }
9ae3a8
             return qdict_get(qobject_to_qdict(qobj), name);
9ae3a8
@@ -117,7 +118,7 @@ static void qmp_input_start_struct(Visitor *v, void **obj, const char *kind,
9ae3a8
                                    const char *name, size_t size, Error **errp)
9ae3a8
 {
9ae3a8
     QmpInputVisitor *qiv = to_qiv(v);
9ae3a8
-    QObject *qobj = qmp_input_get_object(qiv, name);
9ae3a8
+    QObject *qobj = qmp_input_get_object(qiv, name, true);
9ae3a8
     Error *err = NULL;
9ae3a8
 
9ae3a8
     if (!qobj || qobject_type(qobj) != QTYPE_QDICT) {
9ae3a8
@@ -159,7 +160,7 @@ static void qmp_input_end_implicit_struct(Visitor *v, Error **errp)
9ae3a8
 static void qmp_input_start_list(Visitor *v, const char *name, Error **errp)
9ae3a8
 {
9ae3a8
     QmpInputVisitor *qiv = to_qiv(v);
9ae3a8
-    QObject *qobj = qmp_input_get_object(qiv, name);
9ae3a8
+    QObject *qobj = qmp_input_get_object(qiv, name, true);
9ae3a8
 
9ae3a8
     if (!qobj || qobject_type(qobj) != QTYPE_QLIST) {
9ae3a8
         error_set(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null",
9ae3a8
@@ -211,7 +212,7 @@ static void qmp_input_type_int(Visitor *v, int64_t *obj, const char *name,
9ae3a8
                                Error **errp)
9ae3a8
 {
9ae3a8
     QmpInputVisitor *qiv = to_qiv(v);
9ae3a8
-    QObject *qobj = qmp_input_get_object(qiv, name);
9ae3a8
+    QObject *qobj = qmp_input_get_object(qiv, name, true);
9ae3a8
 
9ae3a8
     if (!qobj || qobject_type(qobj) != QTYPE_QINT) {
9ae3a8
         error_set(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null",
9ae3a8
@@ -226,7 +227,7 @@ static void qmp_input_type_bool(Visitor *v, bool *obj, const char *name,
9ae3a8
                                 Error **errp)
9ae3a8
 {
9ae3a8
     QmpInputVisitor *qiv = to_qiv(v);
9ae3a8
-    QObject *qobj = qmp_input_get_object(qiv, name);
9ae3a8
+    QObject *qobj = qmp_input_get_object(qiv, name, true);
9ae3a8
 
9ae3a8
     if (!qobj || qobject_type(qobj) != QTYPE_QBOOL) {
9ae3a8
         error_set(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null",
9ae3a8
@@ -241,7 +242,7 @@ static void qmp_input_type_str(Visitor *v, char **obj, const char *name,
9ae3a8
                                Error **errp)
9ae3a8
 {
9ae3a8
     QmpInputVisitor *qiv = to_qiv(v);
9ae3a8
-    QObject *qobj = qmp_input_get_object(qiv, name);
9ae3a8
+    QObject *qobj = qmp_input_get_object(qiv, name, true);
9ae3a8
 
9ae3a8
     if (!qobj || qobject_type(qobj) != QTYPE_QSTRING) {
9ae3a8
         error_set(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null",
9ae3a8
@@ -256,7 +257,7 @@ static void qmp_input_type_number(Visitor *v, double *obj, const char *name,
9ae3a8
                                   Error **errp)
9ae3a8
 {
9ae3a8
     QmpInputVisitor *qiv = to_qiv(v);
9ae3a8
-    QObject *qobj = qmp_input_get_object(qiv, name);
9ae3a8
+    QObject *qobj = qmp_input_get_object(qiv, name, true);
9ae3a8
 
9ae3a8
     if (!qobj || (qobject_type(qobj) != QTYPE_QFLOAT &&
9ae3a8
         qobject_type(qobj) != QTYPE_QINT)) {
9ae3a8
@@ -276,7 +277,7 @@ static void qmp_input_start_optional(Visitor *v, bool *present,
9ae3a8
                                      const char *name, Error **errp)
9ae3a8
 {
9ae3a8
     QmpInputVisitor *qiv = to_qiv(v);
9ae3a8
-    QObject *qobj = qmp_input_get_object(qiv, name);
9ae3a8
+    QObject *qobj = qmp_input_get_object(qiv, name, true);
9ae3a8
 
9ae3a8
     if (!qobj) {
9ae3a8
         *present = false;
9ae3a8
-- 
9ae3a8
1.7.1
9ae3a8