2008-10-01 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Wed, 1 Oct 2008 16:38:39 +0000 (16:38 -0000)
committerZoltan Varga <vargaz@gmail.com>
Wed, 1 Oct 2008 16:38:39 +0000 (16:38 -0000)
* pinvoke3.cs libtest.c: Add test for byref string marshalling.

svn path=/trunk/mono/; revision=114586

mono/tests/ChangeLog
mono/tests/libtest.c
mono/tests/pinvoke3.cs

index a21eb003da2fd5a10a4de2e73f40d93d94448a32..32ff8cf92545a90606b3aeb93362cb0dcb18a2d9 100644 (file)
@@ -1,3 +1,7 @@
+2008-10-01  Zoltan Varga  <vargaz@gmail.com>
+
+       * pinvoke3.cs libtest.c: Add test for byref string marshalling.
+
 2008-09-30  Mark Probst  <mark.probst@gmail.com>
 
        * generic-constrained.2.il: Test case for the constrained. prefix
index 70d1f718e478802741f718524dde9487fbdfb594..3fd22de9edde942c1d9d51839c98f71c2d12295d 100644 (file)
@@ -2072,6 +2072,28 @@ mono_test_marshal_return_string_array_delegate (ReturnStringArrayDelegate d)
        return res;
 }
 
+typedef int (STDCALL *ByrefStringDelegate) (char **s);
+
+LIBTEST_API int STDCALL 
+mono_test_marshal_byref_string_delegate (ByrefStringDelegate d)
+{
+       char *s = (char*)"ABC";
+       int res;
+
+       res = d (&s);
+       if (res != 0)
+               return res;
+
+       if (!strcmp (s, "DEF"))
+               res = 0;
+       else
+               res = 2;
+
+       marshal_free (s);
+
+       return res;
+}
+
 LIBTEST_API int STDCALL 
 add_delegate (int i, int j)
 {
index f506fe3184d6b2bc915837d23c0c08ed2d2e52df..5660be057ec67f088a139d20433120b0b8e48a06 100644 (file)
@@ -986,4 +986,24 @@ public class Tests {
                return mono_test_marshal_return_string_array_delegate (new ReturnArrayDelegate (return_array_delegate_null));
        }
 
+       /*
+        * Byref string marshalling
+        */
+       public delegate int ByrefStringDelegate (ref string s);
+
+       [DllImport ("libtest", EntryPoint="mono_test_marshal_byref_string_delegate")]
+       public static extern int mono_test_marshal_byref_string_delegate (ByrefStringDelegate d);
+
+       public static int byref_string_delegate (ref string s) {
+               if (s != "ABC")
+                       return 1;
+
+               s = "DEF";
+
+               return 0;
+       }
+
+       public static int test_0_marshal_byref_string_delegate () {     
+               return mono_test_marshal_byref_string_delegate (new ByrefStringDelegate (byref_string_delegate));
+       }
 }