Description: IconThem: use the glib marshallers Use GLib.Marshaller
 instead of doing it per hand. This makes IconTheme.get_SearchPath()
 safe to use in 64-bit machines, as we don't try to make the pointer
 fit into a Int32.
Author: Carlos Martín Nieto <cmn@dwim.me>

Index: gtk-sharp2/gtk/IconTheme.custom
===================================================================
--- gtk-sharp2.orig/gtk/IconTheme.custom	2012-09-02 18:22:23.517201189 +0200
+++ gtk-sharp2/gtk/IconTheme.custom	2012-09-05 23:48:34.244916093 +0200
@@ -71,9 +71,6 @@
 
                 public string[] SearchPath {
                         get {
-				string[] retval;
-                            
-				unsafe {
 					int length;
 					IntPtr raw_ret;
 					if (IsWindowsPlatform)
@@ -81,31 +78,22 @@
 					else
 						gtk_icon_theme_get_search_path (Handle, out raw_ret, out length);
 
-					int size = Marshal.SizeOf (typeof (IntPtr));
-					retval = new string[length];
-					for (int i = 0, j = 0; i < length; i++, j += size) {
-						IntPtr string_ptr = Marshal.ReadIntPtr (new IntPtr (raw_ret.ToInt32 () + j));
-						retval[i] = GLib.Marshaller.Utf8PtrToString (string_ptr);
-					}
-
-					g_strfreev (raw_ret);
-				}
-                            
-				return retval;
+					return GLib.Marshaller.NullTermPtrToStringArray(raw_ret, true);
+
 			}
 			set {
-				int cnt_path = value == null ? 0 : value.Length;
-				IntPtr[] native_path = new IntPtr [cnt_path];
-				for (int i = 0; i < cnt_path; i++)
-					native_path [i] = GLib.Marshaller.StringToPtrGStrdup (value[i]);
+				IntPtr[] native_path;
+				if (value == null)
+					native_path = new IntPtr [0];
+				else
+					native_path = GLib.Marshaller.StringArrayToNullTermPointer (value);
 
 				if (IsWindowsPlatform)
-					gtk_icon_theme_set_search_path_utf8 (Handle, native_path, native_path.Length);
+					gtk_icon_theme_set_search_path_utf8 (Handle, native_path, value.Length);
 				else
-					gtk_icon_theme_set_search_path (Handle, native_path, native_path.Length);
+					gtk_icon_theme_set_search_path (Handle, native_path, value.Length);
 
-				for (int i = 0; i < native_path.Length; i++)
-					GLib.Marshaller.Free (native_path[i]);
+				GLib.Marshaller.Free(native_path);
 			}
 		}
 
