Author: mkestner
Date: 2007-11-08 12:45:59 -0500 (Thu, 08 Nov 2007)
New Revision: 89220

Modified:
   branches/gtk-sharp-2-468-branch/gtk-sharp/ChangeLog
   branches/gtk-sharp-2-468-branch/gtk-sharp/glib/Marshaller.cs
Log:

2007-11-08  Mike Kestner  <[EMAIL PROTECTED]>

        * glib/Marshaller.cs: new null-terminated string[] marshaler from
        Mono.Unix with adaptations by Michael Hutchinson.


Modified: branches/gtk-sharp-2-468-branch/gtk-sharp/ChangeLog
===================================================================
--- branches/gtk-sharp-2-468-branch/gtk-sharp/ChangeLog 2007-11-08 17:29:53 UTC 
(rev 89219)
+++ branches/gtk-sharp-2-468-branch/gtk-sharp/ChangeLog 2007-11-08 17:45:59 UTC 
(rev 89220)
@@ -1,3 +1,8 @@
+2007-11-08  Mike Kestner  <[EMAIL PROTECTED]>
+
+       * glib/Marshaller.cs: new null-terminated string[] marshaler from
+       Mono.Unix with adaptations by Michael Hutchinson.
+
 2007-10-16  Mike Kestner  <[EMAIL PROTECTED]>
 
        * gnome/CanvasItem.custom:

Modified: branches/gtk-sharp-2-468-branch/gtk-sharp/glib/Marshaller.cs
===================================================================
--- branches/gtk-sharp-2-468-branch/gtk-sharp/glib/Marshaller.cs        
2007-11-08 17:29:53 UTC (rev 89219)
+++ branches/gtk-sharp-2-468-branch/gtk-sharp/glib/Marshaller.cs        
2007-11-08 17:45:59 UTC (rev 89220)
@@ -133,6 +133,24 @@
                                return ret.Replace ("%", "%%");
                }
 
+               public static string[] PtrToStringArrayGFree (IntPtr 
string_array)
+               {
+                       if (string_array == IntPtr.Zero)
+                               return new string [0];
+       
+                       int count = 0;
+                       while (Marshal.ReadIntPtr (string_array, 
count*IntPtr.Size) != IntPtr.Zero)
+                               ++count;
+       
+                       string[] members = new string[count];
+                       for (int i = 0; i < count; ++i) {
+                               IntPtr s = Marshal.ReadIntPtr (string_array, i 
* IntPtr.Size);
+                               members[i] = GLib.Marshaller.PtrToStringGFree 
(s);
+                       }
+                       GLib.Marshaller.Free (string_array);
+                       return members;
+               }
+
                // Argv marshalling -- unpleasantly complex, but
                // don't know of a better way to do it.
                //

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to