diff --git a/qemu/qobject/qlit.c b/qemu/qobject/qlit.c index 54161e26..c11e9c4f 100644 --- a/qemu/qobject/qlit.c +++ b/qemu/qobject/qlit.c @@ -23,29 +23,6 @@ #include "qapi/qmp/qobject.h" #include "qapi/qmp/qstring.h" -typedef struct QListCompareHelper { - int index; - QLitObject *objs; - bool result; -} QListCompareHelper; - -static void compare_helper(QObject *obj, void *opaque) -{ - QListCompareHelper *helper = opaque; - - if (!helper->result) { - return; - } - - if (helper->objs[helper->index].type == QTYPE_NONE) { - helper->result = false; - return; - } - - helper->result = - qlit_equal_qobject(&helper->objs[helper->index++], obj); -} - static bool qlit_equal_qdict(const QLitObject *lhs, const QDict *qdict) { int i; @@ -67,6 +44,23 @@ static bool qlit_equal_qdict(const QLitObject *lhs, const QDict *qdict) return true; } +static bool qlit_equal_qlist(const QLitObject *lhs, const QList *qlist) +{ + QListEntry *e; + int i = 0; + + QLIST_FOREACH_ENTRY(qlist, e) { + QObject *obj = qlist_entry_obj(e); + + if (!qlit_equal_qobject(&lhs->value.qlist[i], obj)) { + return false; + } + i++; + } + + return !e && lhs->value.qlist[i].type == QTYPE_NONE; +} + bool qlit_equal_qobject(const QLitObject *lhs, const QObject *rhs) { if (!rhs || lhs->type != qobject_type(rhs)) { @@ -83,17 +77,8 @@ bool qlit_equal_qobject(const QLitObject *lhs, const QObject *rhs) qstring_get_str(qobject_to_qstring(rhs))) == 0); case QTYPE_QDICT: return qlit_equal_qdict(lhs, qobject_to_qdict(rhs)); - case QTYPE_QLIST: { - QListCompareHelper helper; - - helper.index = 0; - helper.objs = lhs->value.qlist; - helper.result = true; - - qlist_iter(qobject_to_qlist(rhs), compare_helper, &helper); - - return helper.result; - } + case QTYPE_QLIST: + return qlit_equal_qlist(lhs, qobject_to_qlist(rhs)); case QTYPE_QNULL: return true; default: