All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luiz Capitulino <lcapitulino@redhat.com>
To: Miguel Di Ciurcio Filho <miguel.filho@gmail.com>
Cc: qemu-devel@nongnu.org, armbru@redhat.com
Subject: [Qemu-devel] Re: [PATCH v4 01/10] QObject API: introduce qdict_to_qstring() function
Date: Thu, 27 May 2010 14:50:16 -0300	[thread overview]
Message-ID: <20100527145016.3513424e@redhat.com> (raw)
In-Reply-To: <1274202469-9332-2-git-send-email-miguel.filho@gmail.com>

On Tue, 18 May 2010 14:07:40 -0300
Miguel Di Ciurcio Filho <miguel.filho@gmail.com> wrote:

> This is a helper function that converts a QDict to a QString, using
> the format:
> 
> key1=value1 SEP key2=value2 SEP key3=value3
> 
> Handy for debugging and formating the Monitor output.
> 
> Signed-off-by: Miguel Di Ciurcio Filho <miguel.filho@gmail.com>

 It's very better now, some comments below.

> ---
>  qdict.c |   55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  qdict.h |    9 +++++++++
>  2 files changed, 64 insertions(+), 0 deletions(-)
> 
> diff --git a/qdict.c b/qdict.c
> index 175bc17..19c053f 100644
> --- a/qdict.c
> +++ b/qdict.c
> @@ -267,6 +267,61 @@ const char *qdict_get_str(const QDict *qdict, const char *key)
>      return qstring_get_str(qobject_to_qstring(obj));
>  }
>  
> +static void qdict_to_qstring_iter(const char *key, QObject *obj, void *opaque)
> +{
> +    struct qstring_pack *pack = opaque;
> +    qstring_append(pack->str, key);
> +    qstring_append(pack->str, "=");
> +    switch (qobject_type(obj)) {
> +    case QTYPE_QSTRING:
> +        qstring_append(pack->str, qstring_get_str(qobject_to_qstring(obj)));
> +        break;
> +    case QTYPE_QINT:
> +        qstring_append_int(pack->str, qint_get_int(qobject_to_qint(obj)));
> +        break;
> +    case QTYPE_QBOOL:
> +        qstring_append(pack->str, qbool_get_int(qobject_to_qbool(obj)) ? "true" :
> +        "false" );
> +        break;
> +    default:
> +        qstring_append(pack->str, "NULL");
> +    }
> +
> +    pack->qdict_iter_current_key++;
> +
> +    if (pack->qdict_iter_current_key < pack->qdict_iter_total_keys) {
> +        qstring_append(pack->str, pack->separator);
> +    }
> +}
> +
> +/**
> + * qdict_to_qstring(): Format a string with the keys and values of a QDict.
> + *
> + * Nested lists and dicts are not supported, yet.
> + *
> + * Return a pointer to a QString, with the following format:
> + *    key1=value1 SEP key2=value2 SEP key3=value3
> + */
> +QString *qdict_to_qstring(const QDict *qdict, const char *separator)
> +{
> +    struct qstring_pack *pack;
> +    QString *str;
> +    str = qstring_new();
> +
> +    pack = qemu_malloc(sizeof(*pack));

 You can allocate on the stack.

> +    pack->str = str;
> +    pack->qdict_iter_current_key = 0;
> +    pack->qdict_iter_total_keys = qdict_size(qdict);
> +    pack->separator = separator;
> +
> +    qdict_iter(qdict, qdict_to_qstring_iter, pack);
> +
> +    qemu_free(pack);
> +
> +    return str;
> +}
> +
> +
>  /**
>   * qdict_get_try_int(): Try to get integer mapped by 'key'
>   *
> diff --git a/qdict.h b/qdict.h
> index 5e5902c..8a54733 100644
> --- a/qdict.h
> +++ b/qdict.h
> @@ -15,6 +15,7 @@
>  
>  #include "qobject.h"
>  #include "qlist.h"
> +#include "qstring.h"
>  #include "qemu-queue.h"
>  #include <stdint.h>
>  
> @@ -32,6 +33,13 @@ typedef struct QDict {
>      QLIST_HEAD(,QDictEntry) table[QDICT_HASH_SIZE];
>  } QDict;
>  
> +struct qstring_pack {
> +    QString *str;
> +    size_t qdict_iter_total_keys;
> +    size_t qdict_iter_current_key;
> +    const char *separator;
> +};

 The header file should contain only public interfaces, qstring_pack is
something internal to qdict.c so please move this right above
qdict_to_qstring_iter() also suggest shorter names like 'total_keys'.

> +
>  /* Object API */
>  QDict *qdict_new(void);
>  size_t qdict_size(const QDict *qdict);
> @@ -55,6 +63,7 @@ int qdict_get_bool(const QDict *qdict, const char *key);
>  QList *qdict_get_qlist(const QDict *qdict, const char *key);
>  QDict *qdict_get_qdict(const QDict *qdict, const char *key);
>  const char *qdict_get_str(const QDict *qdict, const char *key);
> +QString *qdict_to_qstring(const QDict *qdict, const char *separator);
>  int64_t qdict_get_try_int(const QDict *qdict, const char *key,
>                            int64_t err_value);
>  const char *qdict_get_try_str(const QDict *qdict, const char *key);

  reply	other threads:[~2010-05-27 17:50 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-18 17:07 [Qemu-devel] [PATCH v4 0/10] Introduce 'info netdevices' with QMP support Miguel Di Ciurcio Filho
2010-05-18 17:07 ` [Qemu-devel] [PATCH v4 01/10] QObject API: introduce qdict_to_qstring() function Miguel Di Ciurcio Filho
2010-05-27 17:50   ` Luiz Capitulino [this message]
2010-05-18 17:07 ` [Qemu-devel] [PATCH v4 02/10] net: introduce qemu_nic_format_info_dict and VLANClientState->info_dict Miguel Di Ciurcio Filho
2010-05-18 17:07 ` [Qemu-devel] [PATCH v4 03/10] net: various devices: add qemu_format_nic_info_dict Miguel Di Ciurcio Filho
2010-05-18 17:07 ` [Qemu-devel] [PATCH v4 04/10] net: xen: introduce info_dict Miguel Di Ciurcio Filho
2010-05-18 17:07 ` [Qemu-devel] [PATCH v4 05/10] net: tap/tap-win32: " Miguel Di Ciurcio Filho
2010-05-27 17:50   ` [Qemu-devel] " Luiz Capitulino
2010-05-18 17:07 ` [Qemu-devel] [PATCH v4 06/10] net: vde: " Miguel Di Ciurcio Filho
2010-05-27 17:51   ` [Qemu-devel] " Luiz Capitulino
2010-05-18 17:07 ` [Qemu-devel] [PATCH v4 07/10] net: dump: " Miguel Di Ciurcio Filho
2010-05-18 17:07 ` [Qemu-devel] [PATCH v4 08/10] net: slirp: " Miguel Di Ciurcio Filho
2010-05-18 17:07 ` [Qemu-devel] [PATCH v4 09/10] net: socket: " Miguel Di Ciurcio Filho
2010-05-18 17:07 ` [Qemu-devel] [PATCH v4 10/10] monitor/net: introduce 'info netdevices' with QMP support Miguel Di Ciurcio Filho
2010-05-27 17:50 ` [Qemu-devel] Re: [PATCH v4 0/10] Introduce " Luiz Capitulino

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=20100527145016.3513424e@redhat.com \
    --to=lcapitulino@redhat.com \
    --cc=armbru@redhat.com \
    --cc=miguel.filho@gmail.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.