On Sat, 21 Apr 2012 22:41:27 +0900 "NODA, Kai" <noda...@gmail.com> wrote:
> From: "NODA, Kai" <noda...@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. > > Signed-off-by: NODA, Kai <noda...@gmail.com> Forgot to say this was applied, but you probably now that by now :) > --- > > Added sign-off. Sorry for inconvenience! > > 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--; > } >