Re: [Qemu-devel] [PATCH v2 06/27] qom: add QObject-based property get/set wrappers

2012-02-08 Thread Luiz Capitulino
On Tue, 07 Feb 2012 10:12:34 +0100
Paolo Bonzini pbonz...@redhat.com wrote:

 On 02/06/2012 03:16 PM, Anthony Liguori wrote:
 
  Move the creation of QmpInputVisitor and QmpOutputVisitor from
  qmp.c to qom/object.c, since it's the only practical way to access
  object properties.
 
  Signed-off-by: Paolo Bonzinipbonz...@redhat.com
 
  Reluctantly-Reviewed-by: Anthony Liguori aligu...@us.ibm.com
 
 Fair enough, thanks very much.  :)
 
  As long as we keep this isolated such that it's easy to remove.  At some
  point, we need to remove all usage of QObject in the tree and replace it
  with GVariant.
 
 Agreed, we'll revisit after Luiz completes QAPI.

Commands are not far away. Events are still missing, although they could be
converted along with the introduction of GVariant.



Re: [Qemu-devel] [PATCH v2 06/27] qom: add QObject-based property get/set wrappers

2012-02-07 Thread Paolo Bonzini

On 02/06/2012 03:16 PM, Anthony Liguori wrote:



Move the creation of QmpInputVisitor and QmpOutputVisitor from
qmp.c to qom/object.c, since it's the only practical way to access
object properties.

Signed-off-by: Paolo Bonzinipbonz...@redhat.com


Reluctantly-Reviewed-by: Anthony Liguori aligu...@us.ibm.com


Fair enough, thanks very much.  :)


As long as we keep this isolated such that it's easy to remove.  At some
point, we need to remove all usage of QObject in the tree and replace it
with GVariant.


Agreed, we'll revisit after Luiz completes QAPI.

Paolo



Re: [Qemu-devel] [PATCH v2 06/27] qom: add QObject-based property get/set wrappers

2012-02-06 Thread Anthony Liguori

On 02/04/2012 02:02 AM, Paolo Bonzini wrote:

Move the creation of QmpInputVisitor and QmpOutputVisitor from
qmp.c to qom/object.c, since it's the only practical way to access
object properties.

Signed-off-by: Paolo Bonzinipbonz...@redhat.com


Reluctantly-Reviewed-by: Anthony Liguori aligu...@us.ibm.com

As long as we keep this isolated such that it's easy to remove.  At some point, 
we need to remove all usage of QObject in the tree and replace it with GVariant.


Regards,

Anthony Liguori



[Qemu-devel] [PATCH v2 06/27] qom: add QObject-based property get/set wrappers

2012-02-04 Thread Paolo Bonzini
Move the creation of QmpInputVisitor and QmpOutputVisitor from
qmp.c to qom/object.c, since it's the only practical way to access
object properties.

Signed-off-by: Paolo Bonzini pbonz...@redhat.com
---
 include/qemu/qom-qobject.h |   43 +++
 qmp.c  |   18 +++---
 qom/Makefile   |2 +-
 qom/qom-qobject.c  |   44 
 4 files changed, 91 insertions(+), 16 deletions(-)
 create mode 100644 include/qemu/qom-qobject.h
 create mode 100644 qom/qom-qobject.c

diff --git a/include/qemu/qom-qobject.h b/include/qemu/qom-qobject.h
new file mode 100644
index 000..9094eef
--- /dev/null
+++ b/include/qemu/qom-qobject.h
@@ -0,0 +1,42 @@
+/*
+ * QEMU Object Model - QObject wrappers
+ *
+ * Copyright (C) 2012 Red Hat, Inc.
+ *
+ * Author: Paolo Bonzini pbonz...@redhat.com
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ *
+ */
+
+#ifndef QEMU_QOM_QOBJECT_H
+#define QEMU_QOM_QOBJECT_H
+
+#include qemu/object.h
+
+/*
+ * object_property_get_qobject:
+ * @obj: the object
+ * @name: the name of the property
+ * @errp: returns an error if this function fails
+ *
+ * Returns: the value of the property, converted to QObject, or NULL if
+ * an error occurs.
+ */
+struct QObject *object_property_get_qobject(Object *obj, const char *name,
+struct Error **errp);
+
+/**
+ * object_property_set_qobject:
+ * @obj: the object
+ * @ret: The value that will be written to the property.
+ * @name: the name of the property
+ * @errp: returns an error if this function fails
+ *
+ * Writes a property to a object.
+ */
+void object_property_set_qobject(Object *obj, struct QObject *qobj,
+ const char *name, struct Error **errp);
+
+#endif
diff --git a/qmp.c b/qmp.c
index 45052cc..1f64844 100644
--- a/qmp.c
+++ b/qmp.c
@@ -21,9 +21,8 @@
 #include kvm.h
 #include arch_init.h
 #include hw/qdev.h
-#include qapi/qmp-input-visitor.h
-#include qapi/qmp-output-visitor.h
 #include blockdev.h
+#include qemu/qom-qobject.h
 
 NameInfo *qmp_query_name(Error **errp)
 {
@@ -198,7 +197,6 @@ int qmp_qom_set(Monitor *mon, const QDict *qdict, QObject 
**ret)
 const char *property = qdict_get_str(qdict, property);
 QObject *value = qdict_get(qdict, value);
 Error *local_err = NULL;
-QmpInputVisitor *mi;
 Object *obj;
 
 obj = object_resolve_path(path, NULL);
@@ -207,10 +205,7 @@ int qmp_qom_set(Monitor *mon, const QDict *qdict, QObject 
**ret)
 goto out;
 }
 
-mi = qmp_input_visitor_new(value);
-object_property_set(obj, qmp_input_get_visitor(mi), property, local_err);
-
-qmp_input_visitor_cleanup(mi);
+object_property_set_qobject(obj, value, property, local_err);
 
 out:
 if (local_err) {
@@ -227,7 +222,6 @@ int qmp_qom_get(Monitor *mon, const QDict *qdict, QObject 
**ret)
 const char *path = qdict_get_str(qdict, path);
 const char *property = qdict_get_str(qdict, property);
 Error *local_err = NULL;
-QmpOutputVisitor *mo;
 Object *obj;
 
 obj = object_resolve_path(path, NULL);
@@ -236,13 +230,7 @@ int qmp_qom_get(Monitor *mon, const QDict *qdict, QObject 
**ret)
 goto out;
 }
 
-mo = qmp_output_visitor_new();
-object_property_get(obj, qmp_output_get_visitor(mo), property, local_err);
-if (!local_err) {
-*ret = qmp_output_get_qobject(mo);
-}
-
-qmp_output_visitor_cleanup(mo);
+*ret = object_property_get_qobject(obj, property, local_err);
 
 out:
 if (local_err) {
diff --git a/qom/Makefile b/qom/Makefile
index f33f0be..885a263 100644
--- a/qom/Makefile
+++ b/qom/Makefile
@@ -1 +1 @@
-qom-y = object.o container.o
+qom-y = object.o container.o qom-qobject.o
diff --git a/qom/qom-qobject.c b/qom/qom-qobject.c
new file mode 100644
index 000..90375b0
--- /dev/null
+++ b/qom/qom-qobject.c
@@ -0,0 +1,44 @@
+/*
+ * QEMU Object Model - QObject wrappers
+ *
+ * Copyright (C) 2012 Red Hat, Inc.
+ *
+ * Author: Paolo Bonzini pbonz...@redhat.com
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#include qemu-common.h
+#include qemu/object.h
+#include qemu/qom-qobject.h
+#include qapi/qapi-visit-core.h
+#include qapi/qmp-input-visitor.h
+#include qapi/qmp-output-visitor.h
+
+void object_property_set_qobject(Object *obj, QObject *value,
+ const char *name, Error **errp)
+{
+QmpInputVisitor *mi;
+mi = qmp_input_visitor_new(value);
+object_property_set(obj, qmp_input_get_visitor(mi), name, errp);
+
+qmp_input_visitor_cleanup(mi);
+}
+
+QObject *object_property_get_qobject(Object *obj, const char *name,
+ Error **errp)
+{
+QObject *ret = NULL;
+Error *local_err = NULL;
+