diff mbox

qapi: g_hash_table_find() instead of GHashTableIter.

Message ID 1334329309-6375-1-git-send-email-nodakai@gmail.com
State New
Headers show

Commit Message

NODA, Kai April 13, 2012, 3:01 p.m. UTC
From: "NODA, Kai" <nodakai@gmail.com>

GHashTableIter was first introduced in glib 2.16.
This patch removes it in favor of older g_hash_table_find()
for better compatibility with RHEL5.
---
 qapi/qmp-input-visitor.c |   25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

Comments

Erik Rull April 17, 2012, 7:51 a.m. UTC | #1
On April 13, 2012 at 5:01 PM "NODA, Kai" <nodakai@gmail.com> wrote:

> From: "NODA, Kai" <nodakai@gmail.com>
>
> GHashTableIter was first introduced in glib 2.16.
> This patch removes it in favor of older g_hash_table_find()
> for better compatibility with RHEL5.
> ---
>  qapi/qmp-input-visitor.c |   25 +++++++++++++++++--------
>  1 file changed, 17 insertions(+), 8 deletions(-)
>
> diff --git a/qapi/qmp-input-visitor.c b/qapi/qmp-input-visitor.c
> index 74386b9..4cdc47d 100644
> --- a/qapi/qmp-input-visitor.c
> +++ b/qapi/qmp-input-visitor.c
> @@ -87,20 +87,29 @@ static void qmp_input_push(QmpInputVisitor *qiv,
QObject *obj, Error **errp)
>      qiv->nb_stack++;
>  }
> 
> +/** Only for qmp_input_pop. */
> +static gboolean always_true(gpointer key, gpointer val, gpointer
user_pkey)
> +{
> +    *(const char **)user_pkey = (const char *)key;
> +    return TRUE;
> +}
> +
>  static void qmp_input_pop(QmpInputVisitor *qiv, Error **errp)
>  {
> -    GHashTableIter iter;
> -    gpointer key;
> +    assert(qiv->nb_stack > 0);
> 
> -    if (qiv->strict && qiv->stack[qiv->nb_stack - 1].h) {
> -        g_hash_table_iter_init(&iter, qiv->stack[qiv->nb_stack - 1].h);
> -        if (g_hash_table_iter_next(&iter, &key, NULL)) {
> -            error_set(errp, QERR_QMP_EXTRA_MEMBER, (char *) key);
> +    if (qiv->strict) {
> +        GHashTable * const top_ht = qiv->stack[qiv->nb_stack - 1].h;
> +        if (top_ht) {
> +            if (g_hash_table_size(top_ht)) {
> +                const char *key;
> +                g_hash_table_find(top_ht, always_true, &key);
> +                error_set(errp, QERR_QMP_EXTRA_MEMBER, key);
> +            }
> +            g_hash_table_unref(top_ht);
>          }
> -        g_hash_table_unref(qiv->stack[qiv->nb_stack - 1].h);
>      }
> 
> -    assert(qiv->nb_stack > 0);
>      qiv->nb_stack--;
>  }
> 
> --
> 1.7.9.5
>
>

Acked-by: Erik Rull <erik.rull@rdsoftware.de>

compiles on Debian 4.0 and starts on target system.

Best regards,

Erik
Luiz Capitulino April 17, 2012, 5:23 p.m. UTC | #2
On Sat, 14 Apr 2012 00:01:49 +0900
"NODA, Kai" <nodakai@gmail.com> wrote:

> From: "NODA, Kai" <nodakai@gmail.com>
> 
> GHashTableIter was first introduced in glib 2.16.
> This patch removes it in favor of older g_hash_table_find()
> for better compatibility with RHEL5.

Missing signed-off, otherwise looks good.

> ---
>  qapi/qmp-input-visitor.c |   25 +++++++++++++++++--------
>  1 file changed, 17 insertions(+), 8 deletions(-)
> 
> diff --git a/qapi/qmp-input-visitor.c b/qapi/qmp-input-visitor.c
> index 74386b9..4cdc47d 100644
> --- a/qapi/qmp-input-visitor.c
> +++ b/qapi/qmp-input-visitor.c
> @@ -87,20 +87,29 @@ static void qmp_input_push(QmpInputVisitor *qiv, QObject *obj, Error **errp)
>      qiv->nb_stack++;
>  }
>  
> +/** Only for qmp_input_pop. */
> +static gboolean always_true(gpointer key, gpointer val, gpointer user_pkey)
> +{
> +    *(const char **)user_pkey = (const char *)key;
> +    return TRUE;
> +}
> +
>  static void qmp_input_pop(QmpInputVisitor *qiv, Error **errp)
>  {
> -    GHashTableIter iter;
> -    gpointer key;
> +    assert(qiv->nb_stack > 0);
>  
> -    if (qiv->strict && qiv->stack[qiv->nb_stack - 1].h) {
> -        g_hash_table_iter_init(&iter, qiv->stack[qiv->nb_stack - 1].h);
> -        if (g_hash_table_iter_next(&iter, &key, NULL)) {
> -            error_set(errp, QERR_QMP_EXTRA_MEMBER, (char *) key);
> +    if (qiv->strict) {
> +        GHashTable * const top_ht = qiv->stack[qiv->nb_stack - 1].h;
> +        if (top_ht) {
> +            if (g_hash_table_size(top_ht)) {
> +                const char *key;
> +                g_hash_table_find(top_ht, always_true, &key);
> +                error_set(errp, QERR_QMP_EXTRA_MEMBER, key);
> +            }
> +            g_hash_table_unref(top_ht);
>          }
> -        g_hash_table_unref(qiv->stack[qiv->nb_stack - 1].h);
>      }
>  
> -    assert(qiv->nb_stack > 0);
>      qiv->nb_stack--;
>  }
>
diff mbox

Patch

diff --git a/qapi/qmp-input-visitor.c b/qapi/qmp-input-visitor.c
index 74386b9..4cdc47d 100644
--- a/qapi/qmp-input-visitor.c
+++ b/qapi/qmp-input-visitor.c
@@ -87,20 +87,29 @@  static void qmp_input_push(QmpInputVisitor *qiv, QObject *obj, Error **errp)
     qiv->nb_stack++;
 }
 
+/** Only for qmp_input_pop. */
+static gboolean always_true(gpointer key, gpointer val, gpointer user_pkey)
+{
+    *(const char **)user_pkey = (const char *)key;
+    return TRUE;
+}
+
 static void qmp_input_pop(QmpInputVisitor *qiv, Error **errp)
 {
-    GHashTableIter iter;
-    gpointer key;
+    assert(qiv->nb_stack > 0);
 
-    if (qiv->strict && qiv->stack[qiv->nb_stack - 1].h) {
-        g_hash_table_iter_init(&iter, qiv->stack[qiv->nb_stack - 1].h);
-        if (g_hash_table_iter_next(&iter, &key, NULL)) {
-            error_set(errp, QERR_QMP_EXTRA_MEMBER, (char *) key);
+    if (qiv->strict) {
+        GHashTable * const top_ht = qiv->stack[qiv->nb_stack - 1].h;
+        if (top_ht) {
+            if (g_hash_table_size(top_ht)) {
+                const char *key;
+                g_hash_table_find(top_ht, always_true, &key);
+                error_set(errp, QERR_QMP_EXTRA_MEMBER, key);
+            }
+            g_hash_table_unref(top_ht);
         }
-        g_hash_table_unref(qiv->stack[qiv->nb_stack - 1].h);
     }
 
-    assert(qiv->nb_stack > 0);
     qiv->nb_stack--;
 }