* qt/qdbusmarshall.cpp: Fix a problem of demarshalling lists
authorThiago Macieira <thiago@kde.org>
Sun, 7 May 2006 09:36:19 +0000 (09:36 +0000)
committerThiago Macieira <thiago@kde.org>
Sun, 7 May 2006 09:36:19 +0000 (09:36 +0000)
        and arrays when they had a single element: has_next returns
        false, even before you read the element. So, instead, check
        the array length.

ChangeLog
qt/qdbusmarshall.cpp

index 1deae9d..a0a485f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-05-07  Thiago Macieira  <thiago.macieira@trolltech.com>
+
+       * qt/qdbusmarshall.cpp: Fix a problem of demarshalling lists
+        and arrays when they had a single element: has_next returns
+        false, even before you read the element. So, instead, check
+        the array length.
+
 2006-05-06  Thiago Macieira  <thiago.macieira@trolltech.com>
 
        * qt/qdbusmessage.cpp:
index 3420215..8d80152 100644 (file)
@@ -61,8 +61,7 @@ inline QVariant qFetchList(DBusMessageIter *arrayIt)
 
     DBusMessageIter it;
     dbus_message_iter_recurse(arrayIt, &it);
-
-    if (!dbus_message_iter_has_next(&it))
+    if (dbus_message_iter_get_array_len(&it) == 0)
         return QDBusTypeHelper<QList<QtType> >::toVariant(list);
 
     do {
@@ -78,8 +77,7 @@ static QStringList qFetchStringList(DBusMessageIter *arrayIt)
 
     DBusMessageIter it;
     dbus_message_iter_recurse(arrayIt, &it);
-
-    if (!dbus_message_iter_has_next(&it))
+    if (dbus_message_iter_get_array_len(&it) == 0)
         return list;
 
     do {
@@ -157,7 +155,7 @@ static QVariant qFetchParameter(DBusMessageIter *it)
             DBusMessageIter sub;
             
             dbus_message_iter_recurse(it, &sub);
-            if (!dbus_message_iter_has_next(&sub))
+            if (dbus_message_iter_get_array_len(&sub) == 0)
                 // empty map
                 return map;
             
@@ -179,7 +177,7 @@ static QVariant qFetchParameter(DBusMessageIter *it)
         QList<QVariant> list;
         DBusMessageIter sub;
         dbus_message_iter_recurse(it, &sub);
-        if (!dbus_message_iter_has_next(&sub))
+        if (dbus_message_iter_get_array_len(&sub) == 0)
             return list;
         do {
             list.append(qFetchParameter(&sub));