All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luiz Capitulino <lcapitulino@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH 45/50] qemu-option: Functions to convert to/from QDict
Date: Thu, 4 Mar 2010 17:55:06 -0300	[thread overview]
Message-ID: <20100304175506.33a6456c@redhat.com> (raw)
In-Reply-To: <1267718231-13303-46-git-send-email-armbru@redhat.com>

On Thu,  4 Mar 2010 16:57:06 +0100
Markus Armbruster <armbru@redhat.com> wrote:

> The functions are somewhat restricted.  Good enough for the job at
> hand.  We'll extend them when we need more.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  qemu-option.c |   79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  qemu-option.h |    3 ++
>  2 files changed, 82 insertions(+), 0 deletions(-)
> 
> diff --git a/qemu-option.c b/qemu-option.c
> index ab488e4..24bb19b 100644
> --- a/qemu-option.c
> +++ b/qemu-option.c
> @@ -28,6 +28,7 @@
>  
>  #include "qemu-common.h"
>  #include "qemu-error.h"
> +#include "qemu-objects.h"
>  #include "qemu-option.h"
>  
>  /*
> @@ -777,6 +778,84 @@ QemuOpts *qemu_opts_parse(QemuOptsList *list, const char *params, const char *fi
>      return opts;
>  }
>  
> +static void qemu_opts_from_qdict_1(const char *key, QObject *obj, void *opaque)
> +{
> +    char buf[32];
> +    const char *value;
> +    int n;
> +
> +    if (!strcmp(key, "id")) {
> +        return;
> +    }
> +
> +    switch (qobject_type(obj)) {
> +    case QTYPE_QSTRING:
> +        value = qstring_get_str(qobject_to_qstring(obj));
> +        break;
> +    case QTYPE_QINT:
> +        n = snprintf(buf, sizeof(buf), "%" PRId64,
> +                     qint_get_int(qobject_to_qint(obj)));
> +        assert(n < sizeof(buf));
> +        value = buf;
> +        break;
> +    case QTYPE_QFLOAT:
> +        n = snprintf(buf, sizeof(buf), "%.17g",
> +                     qfloat_get_double(qobject_to_qfloat(obj)));
> +        assert(n < sizeof(buf));
> +        value = buf;
> +        break;
> +    case QTYPE_QBOOL:
> +        strcpy(buf, qbool_get_int(qobject_to_qbool(obj)) ? "on" : "off");
> +        value = buf;
> +        break;
> +    default:
> +        return;
> +    }
> +    qemu_opt_set(opaque, key, value);
> +}
> +
> +/*
> + * Create QemuOpts from a QDict.
> + * Use value of key "id" as ID if it exists and is a QString.
> + * Only QStrings, QInts, QFloats and QBools are copied.  Entries with
> + * other types are silently ignored.
> + */
> +QemuOpts *qemu_opts_from_qdict(QemuOptsList *list, const QDict *qdict)
> +{
> +    QemuOpts *opts;
> +
> +    opts = qemu_opts_create(list, qdict_get_try_str(qdict, "id"), 1);
> +    if (opts == NULL)
> +        return NULL;
> +
> +    qdict_iter(qdict, qemu_opts_from_qdict_1, opts);
> +    return opts;
> +}
> +
> +/*
> + * Convert from QemuOpts to QDict.
> + * The QDict values are of type QString.
> + * TODO We'll want to use types appropriate for opt->desc->type, but
> + * this is enough for now.
> + */
> +QDict *qemu_opts_to_qdict(QemuOpts *opts, QDict *qdict)
> +{
> +    QemuOpt *opt;
> +    QObject *val;
> +
> +    if (!qdict) {
> +        qdict = qdict_new();
> +    }
> +    if (opts->id) {
> +        qdict_put(qdict, "id", qstring_from_str(opts->id));
> +    }
> +    QTAILQ_FOREACH(opt, &opts->head, next) {
> +        val = QOBJECT(qstring_from_str(opt->str));
> +        qdict_put_obj(qdict, opt->name, val);
> +    }

 Why not just do:

qdict_put(qdict, opt->name, qstring_from_str(opt->str));

> +    return qdict;
> +}
> +
>  /* Validate parsed opts against descriptions where no
>   * descriptions were provided in the QemuOptsList.
>   */
> diff --git a/qemu-option.h b/qemu-option.h
> index f3f1de7..d735386 100644
> --- a/qemu-option.h
> +++ b/qemu-option.h
> @@ -28,6 +28,7 @@
>  
>  #include <stdint.h>
>  #include "qemu-queue.h"
> +#include "qdict.h"
>  
>  enum QEMUOptionParType {
>      OPT_FLAG,
> @@ -118,6 +119,8 @@ void qemu_opts_del(QemuOpts *opts);
>  int qemu_opts_validate(QemuOpts *opts, const QemuOptDesc *desc);
>  int qemu_opts_do_parse(QemuOpts *opts, const char *params, const char *firstname);
>  QemuOpts *qemu_opts_parse(QemuOptsList *list, const char *params, const char *firstname);
> +QemuOpts *qemu_opts_from_qdict(QemuOptsList *list, const QDict *qdict);
> +QDict *qemu_opts_to_qdict(QemuOpts *opts, QDict *qdict);
>  
>  typedef int (*qemu_opts_loopfunc)(QemuOpts *opts, void *opaque);
>  int qemu_opts_print(QemuOpts *opts, void *dummy);

  reply	other threads:[~2010-03-04 20:55 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-04 15:56 [Qemu-devel] [PATCH 00/50] Convert device_add to QObject / QError Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 01/50] usb: Remove disabled monitor_printf() in usb_read_file() Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 02/50] savevm: Fix -loadvm to report errors to stderr, not the monitor Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 03/50] pc: Fix error reporting for -boot once Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 04/50] pc: Factor common code out of pc_boot_set() and cmos_init() Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 05/50] tools: Remove unused cur_mon from qemu-tool.c Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 06/50] monitor: Separate "default monitor" and "current monitor" cleanly Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 07/50] block: Simplify usb_msd_initfn() test for "can read bdrv key" Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 08/50] monitor: Factor monitor_set_error() out of qemu_error_internal() Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 09/50] error: Move qemu_error() & friends from monitor.c to own file Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 10/50] error: Simplify error sink setup Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 11/50] error: Move qemu_error & friends into their own header Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 12/50] error: New error_printf() and error_vprintf() Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 13/50] error: Don't abuse qemu_error() for non-error in qdev_device_help() Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 14/50] error: Don't abuse qemu_error() for non-error in qbus_find() Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 15/50] error: Don't abuse qemu_error() for non-error in scsi_hot_add() Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 16/50] error: Replace qemu_error() by error_report() Markus Armbruster
2010-03-13  2:34   ` [Qemu-devel] " Luiz Capitulino
2010-03-04 15:56 ` [Qemu-devel] [PATCH 17/50] error: Rename qemu_error_new() to qerror_report() Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 18/50] error: Infrastructure to track locations for error reporting Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 19/50] error: Include the program name in error messages to stderr Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 20/50] error: Track locations in configuration files Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 21/50] QemuOpts: Fix qemu_config_parse() to catch file read errors Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 22/50] error: Track locations on command line Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 23/50] qdev: Fix -device and device_add to handle unsuitable bus gracefully Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 24/50] qdev: Factor qdev_create_from_info() out of qdev_create() Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 25/50] qdev: Hide "no_user" devices from users Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 26/50] qdev: Hide "ptr" properties " Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 27/50] monitor: New monitor_cur_is_qmp() Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 28/50] error: Let converted handlers print in human monitor Markus Armbruster
2010-03-04 20:50   ` [Qemu-devel] " Luiz Capitulino
2010-03-04 21:06     ` Markus Armbruster
2010-03-04 21:14       ` Luiz Capitulino
2010-03-05 15:43     ` Luiz Capitulino
2010-03-05 16:43       ` Markus Armbruster
2010-03-08 13:41         ` Luiz Capitulino
2010-03-04 15:56 ` [Qemu-devel] [PATCH 29/50] error: Polish human-readable error descriptions Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 30/50] error: New QERR_PROPERTY_NOT_FOUND Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 31/50] error: New QERR_PROPERTY_VALUE_BAD Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 32/50] qdev: convert setting device properties to QError Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 33/50] qdev: Relax parsing of bus option Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 34/50] error: New QERR_BUS_NOT_FOUND Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 35/50] error: New QERR_DEVICE_MULTIPLE_BUSSES Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 36/50] error: New QERR_DEVICE_NO_BUS Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 37/50] qdev: Convert qbus_find() to QError Markus Armbruster
2010-03-04 15:56 ` [Qemu-devel] [PATCH 38/50] error: New error_printf_unless_qmp() Markus Armbruster
2010-03-04 15:57 ` [Qemu-devel] [PATCH 39/50] error: New QERR_BAD_BUS_FOR_DEVICE Markus Armbruster
2010-03-04 15:57 ` [Qemu-devel] [PATCH 40/50] error: New QERR_BUS_NO_HOTPLUG Markus Armbruster
2010-03-04 15:57 ` [Qemu-devel] [PATCH 41/50] error: New QERR_DEVICE_INIT_FAILED Markus Armbruster
2010-03-04 15:57 ` [Qemu-devel] [PATCH 42/50] error: New QERR_NO_BUS_FOR_DEVICE Markus Armbruster
2010-03-04 15:57 ` [Qemu-devel] [PATCH 43/50] Revert "qdev: Use QError for 'device not found' error" Markus Armbruster
2010-03-04 15:57 ` [Qemu-devel] [PATCH 44/50] error: Convert do_device_add() to QError Markus Armbruster
2010-03-04 15:57 ` [Qemu-devel] [PATCH 45/50] qemu-option: Functions to convert to/from QDict Markus Armbruster
2010-03-04 20:55   ` Luiz Capitulino [this message]
2010-03-04 21:12     ` [Qemu-devel] " Markus Armbruster
2010-03-04 21:17       ` Luiz Capitulino
2010-03-04 15:57 ` [Qemu-devel] [PATCH 46/50] qemu-option: Move the implied first name into QemuOptsList Markus Armbruster
2010-03-04 15:57 ` [Qemu-devel] [PATCH 47/50] qemu-option: Rename find_list() to qemu_find_opts() & external linkage Markus Armbruster
2010-03-04 15:57 ` [Qemu-devel] [PATCH 48/50] monitor: New argument type 'O' Markus Armbruster
2010-03-04 15:57 ` [Qemu-devel] [PATCH 49/50] monitor: Use argument type 'O' for device_add Markus Armbruster
2010-03-04 15:57 ` [Qemu-devel] [PATCH 50/50] monitor: convert do_device_add() to QObject Markus Armbruster
2010-03-16 18:31 ` [Qemu-devel] [PULL v2] Convert device_add to QObject / QError Markus Armbruster
2010-03-17 15:28   ` Anthony Liguori

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100304175506.33a6456c@redhat.com \
    --to=lcapitulino@redhat.com \
    --cc=armbru@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.