From e16dafeb5fe958854953532a52eb959563495163 Mon Sep 17 00:00:00 2001 From: Owen Fraser-Green Date: Sat, 1 May 2004 19:56:27 +0000 Subject: Handle empty iterators. --- mono/DBusType/Array.cs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'mono/DBusType/Array.cs') diff --git a/mono/DBusType/Array.cs b/mono/DBusType/Array.cs index 34a842c7..917fa780 100644 --- a/mono/DBusType/Array.cs +++ b/mono/DBusType/Array.cs @@ -36,18 +36,20 @@ namespace DBus.DBusType IntPtr arrayIter = Marshal.AllocCoTaskMem(Arguments.DBusMessageIterSize); int elementTypeCode; - dbus_message_iter_init_array_iterator(iter, arrayIter, out elementTypeCode); + bool empty = dbus_message_iter_init_array_iterator(iter, arrayIter, out elementTypeCode); this.elementType = (Type) Arguments.DBusTypes[(char) elementTypeCode]; elements = new ArrayList(); - do { - object [] pars = new Object[2]; - pars[0] = arrayIter; - pars[1] = service; - DBusType.IDBusType dbusType = (DBusType.IDBusType) Activator.CreateInstance(elementType, pars); - elements.Add(dbusType); - } while (dbus_message_iter_next(arrayIter)); + if (!empty) { + do { + object [] pars = new Object[2]; + pars[0] = arrayIter; + pars[1] = service; + DBusType.IDBusType dbusType = (DBusType.IDBusType) Activator.CreateInstance(elementType, pars); + elements.Add(dbusType); + } while (dbus_message_iter_next(arrayIter)); + } Marshal.FreeCoTaskMem(arrayIter); } @@ -118,7 +120,7 @@ namespace DBus.DBusType } [DllImport("dbus-1")] - private extern static void dbus_message_iter_init_array_iterator(IntPtr iter, + private extern static bool dbus_message_iter_init_array_iterator(IntPtr iter, IntPtr arrayIter, out int elementType); -- cgit