summaryrefslogtreecommitdiffstats
path: root/mono/DBusType
diff options
context:
space:
mode:
authorOwen Fraser-Green <owen@discobabe.net>2004-05-01 19:56:27 +0000
committerOwen Fraser-Green <owen@discobabe.net>2004-05-01 19:56:27 +0000
commite16dafeb5fe958854953532a52eb959563495163 (patch)
tree815dd2da0220f8bc6d5f50f554136b9e5d1e7ac7 /mono/DBusType
parentc2920b8ff69f5574532c701730b1f1b09a5d009f (diff)
Handle empty iterators.
Diffstat (limited to 'mono/DBusType')
-rw-r--r--mono/DBusType/Array.cs20
-rw-r--r--mono/DBusType/Dict.cs26
2 files changed, 25 insertions, 21 deletions
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);
diff --git a/mono/DBusType/Dict.cs b/mono/DBusType/Dict.cs
index bd649434..e93d7d77 100644
--- a/mono/DBusType/Dict.cs
+++ b/mono/DBusType/Dict.cs
@@ -31,20 +31,22 @@ namespace DBus.DBusType
{
IntPtr dictIter = Marshal.AllocCoTaskMem(Arguments.DBusMessageIterSize);
- dbus_message_iter_init_dict_iterator(iter, dictIter);
+ bool empty = dbus_message_iter_init_dict_iterator(iter, dictIter);
this.val = new Hashtable();
- do {
- string key = dbus_message_iter_get_dict_key(dictIter);
-
- // Get the argument type and get the value
- Type elementType = (Type) DBus.Arguments.DBusTypes[(char) dbus_message_iter_get_arg_type(dictIter)];
- object [] pars = new Object[1];
- pars[0] = dictIter;
- DBusType.IDBusType dbusType = (DBusType.IDBusType) Activator.CreateInstance(elementType, pars);
- this.val.Add(key, dbusType);
- } while (dbus_message_iter_next(dictIter));
+ if (!empty) {
+ do {
+ string key = dbus_message_iter_get_dict_key(dictIter);
+
+ // Get the argument type and get the value
+ Type elementType = (Type) DBus.Arguments.DBusTypes[(char) dbus_message_iter_get_arg_type(dictIter)];
+ object [] pars = new Object[1];
+ pars[0] = dictIter;
+ DBusType.IDBusType dbusType = (DBusType.IDBusType) Activator.CreateInstance(elementType, pars);
+ this.val.Add(key, dbusType);
+ } while (dbus_message_iter_next(dictIter));
+ }
Marshal.FreeCoTaskMem(dictIter);
}
@@ -120,7 +122,7 @@ namespace DBus.DBusType
}
[DllImport("dbus-1")]
- private extern static void dbus_message_iter_init_dict_iterator(IntPtr iter,
+ private extern static bool dbus_message_iter_init_dict_iterator(IntPtr iter,
IntPtr dictIter);
[DllImport("dbus-1")]