Patchwork [16/21] qapi: Convert query-chardev

login
register
mail settings
Submitter Luiz Capitulino
Date Sept. 28, 2011, 2:44 p.m.
Message ID <1317221085-5825-17-git-send-email-lcapitulino@redhat.com>
Download mbox | patch
Permalink /patch/116832/
State New
Headers show

Comments

Luiz Capitulino - Sept. 28, 2011, 2:44 p.m.
The original conversion was done by Anthony Liguori. This commit
is just a rebase.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
 hmp.c            |   13 +++++++++++++
 hmp.h            |    1 +
 monitor.c        |   11 +----------
 qapi-schema.json |   26 ++++++++++++++++++++++++++
 qemu-char.c      |   35 +++++++++++------------------------
 qmp-commands.hx  |    6 ++++++
 6 files changed, 58 insertions(+), 34 deletions(-)
Michael Roth - Sept. 29, 2011, 7:17 p.m.
Looks good, tested qmp/hmp commands.

Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Tested-by: Michael Roth <mdroth@linux.vnet.ibm.com>

On Wed, 28 Sep 2011 11:44:40 -0300, Luiz Capitulino <lcapitulino@redhat.com> wrote:
> The original conversion was done by Anthony Liguori. This commit
> is just a rebase.
> 
> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
> ---
>  hmp.c            |   13 +++++++++++++
>  hmp.h            |    1 +
>  monitor.c        |   11 +----------
>  qapi-schema.json |   26 ++++++++++++++++++++++++++
>  qemu-char.c      |   35 +++++++++++------------------------
>  qmp-commands.hx  |    6 ++++++
>  6 files changed, 58 insertions(+), 34 deletions(-)
> 
> diff --git a/hmp.c b/hmp.c
> index 1cd40ae..91de86c 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -80,3 +80,16 @@ void hmp_info_uuid(Monitor *mon)
>      monitor_printf(mon, "%s\n", info->UUID);
>      qapi_free_UuidInfo(info);
>  }
> +
> +void hmp_info_chardev(Monitor *mon)
> +{
> +    ChardevInfoList *char_info, *info;
> +
> +    char_info = qmp_query_chardev(NULL);
> +    for (info = char_info; info; info = info->next) {
> +        monitor_printf(mon, "%s: filename=%s\n", info->value->label,
> +                                                 info->value->filename);
> +    }
> +
> +    qapi_free_ChardevInfoList(char_info);
> +}
> diff --git a/hmp.h b/hmp.h
> index 49a5971..7388f9a 100644
> --- a/hmp.h
> +++ b/hmp.h
> @@ -22,5 +22,6 @@ void hmp_info_version(Monitor *mon);
>  void hmp_info_kvm(Monitor *mon);
>  void hmp_info_status(Monitor *mon);
>  void hmp_info_uuid(Monitor *mon);
> +void hmp_info_chardev(Monitor *mon);
> 
>  #endif
> diff --git a/monitor.c b/monitor.c
> index d294bc9..66b3004 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -2777,8 +2777,7 @@ static const mon_cmd_t info_cmds[] = {
>          .args_type  = "",
>          .params     = "",
>          .help       = "show the character devices",
> -        .user_print = qemu_chr_info_print,
> -        .mhandler.info_new = qemu_chr_info,
> +        .mhandler.info = hmp_info_chardev,
>      },
>      {
>          .name       = "block",
> @@ -3060,14 +3059,6 @@ static const mon_cmd_t qmp_query_cmds[] = {
>          .mhandler.info_new = do_info_commands,
>      },
>      {
> -        .name       = "chardev",
> -        .args_type  = "",
> -        .params     = "",
> -        .help       = "show the character devices",
> -        .user_print = qemu_chr_info_print,
> -        .mhandler.info_new = qemu_chr_info,
> -    },
> -    {
>          .name       = "block",
>          .args_type  = "",
>          .params     = "",
> diff --git a/qapi-schema.json b/qapi-schema.json
> index b678f07..2ebcb1c 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -176,3 +176,29 @@
>  ##
>  { 'command': 'query-uuid', 'returns': 'UuidInfo' }
> 
> +##
> +# @ChardevInfo:
> +#
> +# Information about a character device.
> +#
> +# @label: the label of the character device
> +#
> +# @filename: the filename of the character device
> +#
> +# Notes: @filename is encoded using the QEMU command line character device
> +#        encoding.  See the QEMU man page for details.
> +#
> +# Since: 0.14.0
> +##
> +{ 'type': 'ChardevInfo', 'data': {'label': 'str', 'filename': 'str'} }
> +
> +##
> +# @query-chardev:
> +#
> +# Returns information about current character devices.
> +#
> +# Returns: a list of @ChardevInfo
> +#
> +# Since: 0.14.0
> +##
> +{ 'command': 'query-chardev', 'returns': ['ChardevInfo'] }
> diff --git a/qemu-char.c b/qemu-char.c
> index 09d2309..8bdbcfd 100644
> --- a/qemu-char.c
> +++ b/qemu-char.c
> @@ -31,7 +31,7 @@
>  #include "hw/usb.h"
>  #include "hw/baum.h"
>  #include "hw/msmouse.h"
> -#include "qemu-objects.h"
> +#include "qmp-commands.h"
> 
>  #include <unistd.h>
>  #include <fcntl.h>
> @@ -2650,35 +2650,22 @@ void qemu_chr_delete(CharDriverState *chr)
>      g_free(chr);
>  }
> 
> -static void qemu_chr_qlist_iter(QObject *obj, void *opaque)
> +ChardevInfoList *qmp_query_chardev(Error **errp)
>  {
> -    QDict *chr_dict;
> -    Monitor *mon = opaque;
> -
> -    chr_dict = qobject_to_qdict(obj);
> -    monitor_printf(mon, "%s: filename=%s\n", qdict_get_str(chr_dict, "label"),
> -                                         qdict_get_str(chr_dict, "filename"));
> -}
> -
> -void qemu_chr_info_print(Monitor *mon, const QObject *ret_data)
> -{
> -    qlist_iter(qobject_to_qlist(ret_data), qemu_chr_qlist_iter, mon);
> -}
> -
> -void qemu_chr_info(Monitor *mon, QObject **ret_data)
> -{
> -    QList *chr_list;
> +    ChardevInfoList *chr_list = NULL;
>      CharDriverState *chr;
> 
> -    chr_list = qlist_new();
> -
>      QTAILQ_FOREACH(chr, &chardevs, next) {
> -        QObject *obj = qobject_from_jsonf("{ 'label': %s, 'filename': %s }",
> -                                          chr->label, chr->filename);
> -        qlist_append_obj(chr_list, obj);
> +        ChardevInfoList *info = g_malloc0(sizeof(*info));
> +        info->value = g_malloc0(sizeof(*info->value));
> +        info->value->label = g_strdup(chr->label);
> +        info->value->filename = g_strdup(chr->filename);
> +
> +        info->next = chr_list;
> +        chr_list = info;
>      }
> 
> -    *ret_data = QOBJECT(chr_list);
> +    return chr_list;
>  }
> 
>  CharDriverState *qemu_chr_find(const char *name)
> diff --git a/qmp-commands.hx b/qmp-commands.hx
> index 4fef25f..dfc02af 100644
> --- a/qmp-commands.hx
> +++ b/qmp-commands.hx
> @@ -1120,6 +1120,12 @@ Example:
> 
>  EQMP
> 
> +    {
> +        .name       = "query-chardev",
> +        .args_type  = "",
> +        .mhandler.cmd_new = qmp_marshal_input_query_chardev,
> +    },
> +
>  SQMP
>  query-block
>  -----------
> -- 
> 1.7.7.rc0.72.g4b5ea
>

Patch

diff --git a/hmp.c b/hmp.c
index 1cd40ae..91de86c 100644
--- a/hmp.c
+++ b/hmp.c
@@ -80,3 +80,16 @@  void hmp_info_uuid(Monitor *mon)
     monitor_printf(mon, "%s\n", info->UUID);
     qapi_free_UuidInfo(info);
 }
+
+void hmp_info_chardev(Monitor *mon)
+{
+    ChardevInfoList *char_info, *info;
+
+    char_info = qmp_query_chardev(NULL);
+    for (info = char_info; info; info = info->next) {
+        monitor_printf(mon, "%s: filename=%s\n", info->value->label,
+                                                 info->value->filename);
+    }
+
+    qapi_free_ChardevInfoList(char_info);
+}
diff --git a/hmp.h b/hmp.h
index 49a5971..7388f9a 100644
--- a/hmp.h
+++ b/hmp.h
@@ -22,5 +22,6 @@  void hmp_info_version(Monitor *mon);
 void hmp_info_kvm(Monitor *mon);
 void hmp_info_status(Monitor *mon);
 void hmp_info_uuid(Monitor *mon);
+void hmp_info_chardev(Monitor *mon);
 
 #endif
diff --git a/monitor.c b/monitor.c
index d294bc9..66b3004 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2777,8 +2777,7 @@  static const mon_cmd_t info_cmds[] = {
         .args_type  = "",
         .params     = "",
         .help       = "show the character devices",
-        .user_print = qemu_chr_info_print,
-        .mhandler.info_new = qemu_chr_info,
+        .mhandler.info = hmp_info_chardev,
     },
     {
         .name       = "block",
@@ -3060,14 +3059,6 @@  static const mon_cmd_t qmp_query_cmds[] = {
         .mhandler.info_new = do_info_commands,
     },
     {
-        .name       = "chardev",
-        .args_type  = "",
-        .params     = "",
-        .help       = "show the character devices",
-        .user_print = qemu_chr_info_print,
-        .mhandler.info_new = qemu_chr_info,
-    },
-    {
         .name       = "block",
         .args_type  = "",
         .params     = "",
diff --git a/qapi-schema.json b/qapi-schema.json
index b678f07..2ebcb1c 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -176,3 +176,29 @@ 
 ##
 { 'command': 'query-uuid', 'returns': 'UuidInfo' }
 
+##
+# @ChardevInfo:
+#
+# Information about a character device.
+#
+# @label: the label of the character device
+#
+# @filename: the filename of the character device
+#
+# Notes: @filename is encoded using the QEMU command line character device
+#        encoding.  See the QEMU man page for details.
+#
+# Since: 0.14.0
+##
+{ 'type': 'ChardevInfo', 'data': {'label': 'str', 'filename': 'str'} }
+
+##
+# @query-chardev:
+#
+# Returns information about current character devices.
+#
+# Returns: a list of @ChardevInfo
+#
+# Since: 0.14.0
+##
+{ 'command': 'query-chardev', 'returns': ['ChardevInfo'] }
diff --git a/qemu-char.c b/qemu-char.c
index 09d2309..8bdbcfd 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -31,7 +31,7 @@ 
 #include "hw/usb.h"
 #include "hw/baum.h"
 #include "hw/msmouse.h"
-#include "qemu-objects.h"
+#include "qmp-commands.h"
 
 #include <unistd.h>
 #include <fcntl.h>
@@ -2650,35 +2650,22 @@  void qemu_chr_delete(CharDriverState *chr)
     g_free(chr);
 }
 
-static void qemu_chr_qlist_iter(QObject *obj, void *opaque)
+ChardevInfoList *qmp_query_chardev(Error **errp)
 {
-    QDict *chr_dict;
-    Monitor *mon = opaque;
-
-    chr_dict = qobject_to_qdict(obj);
-    monitor_printf(mon, "%s: filename=%s\n", qdict_get_str(chr_dict, "label"),
-                                         qdict_get_str(chr_dict, "filename"));
-}
-
-void qemu_chr_info_print(Monitor *mon, const QObject *ret_data)
-{
-    qlist_iter(qobject_to_qlist(ret_data), qemu_chr_qlist_iter, mon);
-}
-
-void qemu_chr_info(Monitor *mon, QObject **ret_data)
-{
-    QList *chr_list;
+    ChardevInfoList *chr_list = NULL;
     CharDriverState *chr;
 
-    chr_list = qlist_new();
-
     QTAILQ_FOREACH(chr, &chardevs, next) {
-        QObject *obj = qobject_from_jsonf("{ 'label': %s, 'filename': %s }",
-                                          chr->label, chr->filename);
-        qlist_append_obj(chr_list, obj);
+        ChardevInfoList *info = g_malloc0(sizeof(*info));
+        info->value = g_malloc0(sizeof(*info->value));
+        info->value->label = g_strdup(chr->label);
+        info->value->filename = g_strdup(chr->filename);
+
+        info->next = chr_list;
+        chr_list = info;
     }
 
-    *ret_data = QOBJECT(chr_list);
+    return chr_list;
 }
 
 CharDriverState *qemu_chr_find(const char *name)
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 4fef25f..dfc02af 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -1120,6 +1120,12 @@  Example:
 
 EQMP
 
+    {
+        .name       = "query-chardev",
+        .args_type  = "",
+        .mhandler.cmd_new = qmp_marshal_input_query_chardev,
+    },
+
 SQMP
 query-block
 -----------