]> Git Repo - qemu.git/blobdiff - qapi/qobject-output-visitor.c
Merge remote-tracking branch 'remotes/rth-gitlab/tags/pull-tcg-20210317' into staging
[qemu.git] / qapi / qobject-output-visitor.c
index 871127079d72a14f096586580a5888927f5314ee..ba6f6ac8a72a422c0235751a4befe7429530ab1d 100644 (file)
 #include "qapi/qobject-output-visitor.h"
 #include "qapi/visitor-impl.h"
 #include "qemu/queue.h"
-#include "qemu-common.h"
-#include "qapi/qmp/types.h"
+#include "qapi/qmp/qbool.h"
+#include "qapi/qmp/qdict.h"
+#include "qapi/qmp/qlist.h"
+#include "qapi/qmp/qnull.h"
+#include "qapi/qmp/qnum.h"
+#include "qapi/qmp/qstring.h"
 
 typedef struct QStackEntry {
     QObject *value;
@@ -87,11 +91,11 @@ static void qobject_output_add_obj(QObjectOutputVisitor *qov, const char *name,
         switch (qobject_type(cur)) {
         case QTYPE_QDICT:
             assert(name);
-            qdict_put_obj(qobject_to_qdict(cur), name, value);
+            qdict_put_obj(qobject_to(QDict, cur), name, value);
             break;
         case QTYPE_QLIST:
             assert(!name);
-            qlist_append_obj(qobject_to_qlist(cur), value);
+            qlist_append_obj(qobject_to(QList, cur), value);
             break;
         default:
             g_assert_not_reached();
@@ -99,7 +103,7 @@ static void qobject_output_add_obj(QObjectOutputVisitor *qov, const char *name,
     }
 }
 
-static void qobject_output_start_struct(Visitor *v, const char *name,
+static bool qobject_output_start_struct(Visitor *v, const char *name,
                                         void **obj, size_t unused, Error **errp)
 {
     QObjectOutputVisitor *qov = to_qov(v);
@@ -107,6 +111,7 @@ static void qobject_output_start_struct(Visitor *v, const char *name,
 
     qobject_output_add(qov, name, dict);
     qobject_output_push(qov, dict, obj);
+    return true;
 }
 
 static void qobject_output_end_struct(Visitor *v, void **obj)
@@ -116,7 +121,7 @@ static void qobject_output_end_struct(Visitor *v, void **obj)
     assert(qobject_type(value) == QTYPE_QDICT);
 }
 
-static void qobject_output_start_list(Visitor *v, const char *name,
+static bool qobject_output_start_list(Visitor *v, const char *name,
                                       GenericList **listp, size_t size,
                                       Error **errp)
 {
@@ -125,6 +130,7 @@ static void qobject_output_start_list(Visitor *v, const char *name,
 
     qobject_output_add(qov, name, list);
     qobject_output_push(qov, list, listp);
+    return true;
 }
 
 static GenericList *qobject_output_next_list(Visitor *v, GenericList *tail,
@@ -140,29 +146,31 @@ static void qobject_output_end_list(Visitor *v, void **obj)
     assert(qobject_type(value) == QTYPE_QLIST);
 }
 
-static void qobject_output_type_int64(Visitor *v, const char *name,
+static bool qobject_output_type_int64(Visitor *v, const char *name,
                                       int64_t *obj, Error **errp)
 {
     QObjectOutputVisitor *qov = to_qov(v);
-    qobject_output_add(qov, name, qint_from_int(*obj));
+    qobject_output_add(qov, name, qnum_from_int(*obj));
+    return true;
 }
 
-static void qobject_output_type_uint64(Visitor *v, const char *name,
+static bool qobject_output_type_uint64(Visitor *v, const char *name,
                                        uint64_t *obj, Error **errp)
 {
-    /* FIXME values larger than INT64_MAX become negative */
     QObjectOutputVisitor *qov = to_qov(v);
-    qobject_output_add(qov, name, qint_from_int(*obj));
+    qobject_output_add(qov, name, qnum_from_uint(*obj));
+    return true;
 }
 
-static void qobject_output_type_bool(Visitor *v, const char *name, bool *obj,
+static bool qobject_output_type_bool(Visitor *v, const char *name, bool *obj,
                                      Error **errp)
 {
     QObjectOutputVisitor *qov = to_qov(v);
     qobject_output_add(qov, name, qbool_from_bool(*obj));
+    return true;
 }
 
-static void qobject_output_type_str(Visitor *v, const char *name, char **obj,
+static bool qobject_output_type_str(Visitor *v, const char *name, char **obj,
                                     Error **errp)
 {
     QObjectOutputVisitor *qov = to_qov(v);
@@ -171,32 +179,37 @@ static void qobject_output_type_str(Visitor *v, const char *name, char **obj,
     } else {
         qobject_output_add(qov, name, qstring_from_str(""));
     }
+    return true;
 }
 
-static void qobject_output_type_number(Visitor *v, const char *name,
+static bool qobject_output_type_number(Visitor *v, const char *name,
                                        double *obj, Error **errp)
 {
     QObjectOutputVisitor *qov = to_qov(v);
-    qobject_output_add(qov, name, qfloat_from_double(*obj));
+    qobject_output_add(qov, name, qnum_from_double(*obj));
+    return true;
 }
 
-static void qobject_output_type_any(Visitor *v, const char *name,
+static bool qobject_output_type_any(Visitor *v, const char *name,
                                     QObject **obj, Error **errp)
 {
     QObjectOutputVisitor *qov = to_qov(v);
-    qobject_incref(*obj);
-    qobject_output_add_obj(qov, name, *obj);
+
+    qobject_output_add_obj(qov, name, qobject_ref(*obj));
+    return true;
 }
 
-static void qobject_output_type_null(Visitor *v, const char *name, Error **errp)
+static bool qobject_output_type_null(Visitor *v, const char *name,
+                                     QNull **obj, Error **errp)
 {
     QObjectOutputVisitor *qov = to_qov(v);
-    qobject_output_add_obj(qov, name, qnull());
+    qobject_output_add(qov, name, qnull());
+    return true;
 }
 
 /* Finish building, and return the root object.
  * The root object is never null. The caller becomes the object's
- * owner, and should use qobject_decref() when done with it.  */
+ * owner, and should use qobject_unref() when done with it.  */
 static void qobject_output_complete(Visitor *v, void *opaque)
 {
     QObjectOutputVisitor *qov = to_qov(v);
@@ -205,8 +218,7 @@ static void qobject_output_complete(Visitor *v, void *opaque)
     assert(qov->root && QSLIST_EMPTY(&qov->stack));
     assert(opaque == qov->result);
 
-    qobject_incref(qov->root);
-    *qov->result = qov->root;
+    *qov->result = qobject_ref(qov->root);
     qov->result = NULL;
 }
 
@@ -221,7 +233,7 @@ static void qobject_output_free(Visitor *v)
         g_free(e);
     }
 
-    qobject_decref(qov->root);
+    qobject_unref(qov->root);
     g_free(qov);
 }
 
This page took 0.030727 seconds and 4 git commands to generate.