about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-07-05 08:43:09 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-07-05 08:43:09 +0200
commit383454610014a1c7b8b1af27a623694ee9b2f20f (patch)
tree4b3174fd16005ef2a0a1301416e6427a1f9c8084 /src
parenta3d7f9cd85b105db53f7742a46b43bd8b2dc8662 (diff)
downloadbox64-383454610014a1c7b8b1af27a623694ee9b2f20f.tar.gz
box64-383454610014a1c7b8b1af27a623694ee9b2f20f.zip
Added fallback for SDL_GetJoystickGUIDInfo wrapped function if not in native lib (for #18)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/wrapped/wrappedsdl2.c26
-rwxr-xr-xsrc/wrapped/wrappedsdl2_private.h2
2 files changed, 26 insertions, 2 deletions
diff --git a/src/wrapped/wrappedsdl2.c b/src/wrapped/wrappedsdl2.c
index 2c4c544d..0de950a4 100755
--- a/src/wrapped/wrappedsdl2.c
+++ b/src/wrapped/wrappedsdl2.c
@@ -80,11 +80,13 @@ typedef struct
 
 typedef void  (*vFv_t)();
 typedef void  (*vFiupV_t)(int64_t, uint64_t, void*, va_list);
+typedef void  (*vFGppp_t)(SDL_JoystickGUID, void*, void*, void*);
 #define ADDED_FUNCTIONS() \
     GO(SDL_Quit, vFv_t)           \
     GO(SDL_AllocRW, sdl2_allocrw) \
     GO(SDL_FreeRW, sdl2_freerw)   \
-    GO(SDL_LogMessageV, vFiupV_t)
+    GO(SDL_LogMessageV, vFiupV_t) \
+    GO(SDL_GetJoystickGUIDInfo, vFGppp_t)
 #include "generated/wrappedsdl2types.h"
 
 typedef struct sdl2_my_s {
@@ -870,6 +872,28 @@ EXPORT void* my2_SDL_Vulkan_GetVkGetInstanceProcAddr(x64emu_t* emu)
     return NULL;
 }
 
+EXPORT void my2_SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, uint16_t *vend, uint16_t *prod, uint16_t *ver)
+{
+    sdl2_my_t *my = (sdl2_my_t *)my_context->sdl2lib->priv.w.p2;
+
+    if(my->SDL_GetJoystickGUIDInfo)
+        my->SDL_GetJoystickGUIDInfo(guid, vend, prod, ver);
+    // fallback
+    else {
+	uint16_t *guid16 = (uint16_t *)guid.data;
+	if (guid16[1]==0x0000 && guid16[3]==0x0000 && guid16[5]==0x0000)
+    	{
+	    if(vend) *vend = guid16[2];
+	    if(prod) *prod = guid16[4];
+	    if(ver)  *ver  = guid16[6];
+	} else {
+            if(vend) *vend = 0;
+            if(prod) *prod = 0;
+            if(ver)  *ver  = 0;
+	}
+    }
+}
+
 #define CUSTOM_INIT \
     box64->sdl2lib = lib;                                           \
     lib->priv.w.p2 = getSDL2My(lib);                                \
diff --git a/src/wrapped/wrappedsdl2_private.h b/src/wrapped/wrappedsdl2_private.h
index 504ceec9..299119ec 100755
--- a/src/wrapped/wrappedsdl2_private.h
+++ b/src/wrapped/wrappedsdl2_private.h
@@ -198,7 +198,7 @@ GO(SDL_GetGlobalMouseState, uFpp)
 GO(SDL_GetGrabbedWindow, pFv)
 GO(SDL_GetHint, pFp)
 GO(SDL_GetHintBoolean, iFpi)
-GO(SDL_GetJoystickGUIDInfo, vFppppp)   // the flat SDL_JoystickGUID stuct in 1st argument is same as 2 uint64
+GOM(SDL_GetJoystickGUIDInfo, vFppppp)   //%% the flat SDL_JoystickGUID stuct in 1st argument is same as 2 uint64
 GO(SDL_GetKeyboardFocus, pFv)
 GO(SDL_GetKeyboardState, pFp)
 GO(SDL_GetKeyFromName, pFp)