[SDL] Workaround for a Mono crash in SDL.JoystickGetGUID
authorthefiddler <stapostol@gmail.com>
Sat, 9 Aug 2014 19:17:49 +0000 (21:17 +0200)
committerthefiddler <stapostol@gmail.com>
Sat, 9 Aug 2014 19:17:49 +0000 (21:17 +0200)
It appears that Mono 3.4.0 fails to marshal SDL_JoystickGUID
correctly when used as a return value. Changing the fixed buffer
to a couple of long fields allows the struct to be marshalled
correctly.

Source/OpenTK/Platform/SDL2/Sdl2.cs

index 53418e4..a987c3b 100644 (file)
@@ -1527,21 +1527,22 @@ namespace OpenTK.Platform.SDL2
 
     struct JoystickGuid
     {
-        unsafe fixed byte data[16];
+        long data0;
+        long data1;
 
         public Guid ToGuid()
         {
-            byte[] bytes = new byte[16];
+            byte[] data = new byte[16];
 
             unsafe
             {
-                fixed (byte* pdata = data)
+                fixed (JoystickGuid* pdata = &this)
                 {
-                    Marshal.Copy(new IntPtr(pdata), bytes, 0, bytes.Length); 
+                    Marshal.Copy(new IntPtr(pdata), data, 0, data.Length); 
                 }
             }
 
-            return new Guid(bytes);
+            return new Guid(data);
         }
     }