sdl2-compat: Fix SDL_JoystickInstanceID and SDL_SensorGetInstanceID.

From aefeebcc416169c36fb16dad080f0c0e658ff8f9 Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Thu, 12 Jan 2023 10:01:10 +0300
Subject: [PATCH] Fix SDL_JoystickInstanceID and SDL_SensorGetInstanceID.

Also fix signatures of other functions accepting SDL_JoystickID and
SDL_SensorID parameters in dynapi. The 'passthrough' machinery from
sdl3_syms.h should be OK for them.

Closes https://github.com/libsdl-org/sdl2-compat/issues/26
---
 src/dynapi/SDL_dynapi_procs.h | 14 +++++++-------
 src/sdl2_compat.c             | 30 ++++++++++++++++++++++++++++--
 src/sdl3_syms.h               |  4 ++--
 3 files changed, 37 insertions(+), 11 deletions(-)

diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h
index b4b8234..3ac1e07 100644
--- a/src/dynapi/SDL_dynapi_procs.h
+++ b/src/dynapi/SDL_dynapi_procs.h
@@ -235,7 +235,7 @@ SDL_DYNAPI_PROC(SDL_JoystickGUID,SDL_JoystickGetGUID,(SDL_Joystick *a),(a),retur
 SDL_DYNAPI_PROC(void,SDL_JoystickGetGUIDString,(SDL_JoystickGUID a, char *b, int c),(a,b,c),)
 SDL_DYNAPI_PROC(SDL_JoystickGUID,SDL_JoystickGetGUIDFromString,(const char *a),(a),return)
 SDL_DYNAPI_PROC(SDL_bool,SDL_JoystickGetAttached,(SDL_Joystick *a),(a),return)
-SDL_DYNAPI_PROC(SDL_JoystickID,SDL_JoystickInstanceID,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(SDL2_JoystickID,SDL_JoystickInstanceID,(SDL_Joystick *a),(a),return)
 SDL_DYNAPI_PROC(int,SDL_JoystickNumAxes,(SDL_Joystick *a),(a),return)
 SDL_DYNAPI_PROC(int,SDL_JoystickNumBalls,(SDL_Joystick *a),(a),return)
 SDL_DYNAPI_PROC(int,SDL_JoystickNumHats,(SDL_Joystick *a),(a),return)
@@ -628,8 +628,8 @@ SDL_DYNAPI_PROC(void,SDL_SetWindowsMessageHook,(SDL_WindowsMessageHook a, void *
 #endif
 SDL_DYNAPI_PROC(int,SDL_GetDisplayDPI,(int a, float *b, float *c, float *d),(a,b,c,d),return)
 SDL_DYNAPI_PROC(SDL_JoystickPowerLevel,SDL_JoystickCurrentPowerLevel,(SDL_Joystick *a),(a),return)
-SDL_DYNAPI_PROC(SDL_GameController*,SDL_GameControllerFromInstanceID,(SDL_JoystickID a),(a),return)
-SDL_DYNAPI_PROC(SDL_Joystick*,SDL_JoystickFromInstanceID,(SDL_JoystickID a),(a),return)
+SDL_DYNAPI_PROC(SDL_GameController*,SDL_GameControllerFromInstanceID,(SDL2_JoystickID a),(a),return)
+SDL_DYNAPI_PROC(SDL_Joystick*,SDL_JoystickFromInstanceID,(SDL2_JoystickID a),(a),return)
 SDL_DYNAPI_PROC(int,SDL_GetDisplayUsableBounds,(int a, SDL_Rect *b),(a,b),return)
 SDL_DYNAPI_PROC(int,SDL_GetWindowBordersSize,(SDL_Window *a, int *b, int *c, int *d, int *e),(a,b,c,d,e),return)
 SDL_DYNAPI_PROC(int,SDL_SetWindowOpacity,(SDL_Window *a, float b),(a,b),return)
@@ -660,7 +660,7 @@ SDL_DYNAPI_PROC(SDL_JoystickType,SDL_JoystickGetDeviceType,(int a),(a),return)
 SDL_DYNAPI_PROC(SDL_JoystickType,SDL_JoystickGetType,(SDL_Joystick *a),(a),return)
 SDL_DYNAPI_PROC(void,SDL_MemoryBarrierReleaseFunction,(void),(),)
 SDL_DYNAPI_PROC(void,SDL_MemoryBarrierAcquireFunction,(void),(),)
-SDL_DYNAPI_PROC(SDL_JoystickID,SDL_JoystickGetDeviceInstanceID,(int a),(a),return)
+SDL_DYNAPI_PROC(SDL2_JoystickID,SDL_JoystickGetDeviceInstanceID,(int a),(a),return)
 SDL_DYNAPI_PROC(size_t,SDL_utf8strlen,(const char *a),(a),return)
 SDL_DYNAPI_PROC(void*,SDL_LoadFile_RW,(SDL_RWops *a, size_t *b, int c),(a,b,c),return)
 SDL_DYNAPI_PROC(int,SDL_wcscmp,(const wchar_t *a, const wchar_t *b),(a,b),return)
@@ -729,13 +729,13 @@ SDL_DYNAPI_PROC(int,SDL_NumSensors,(void),(),return)
 SDL_DYNAPI_PROC(const char*,SDL_SensorGetDeviceName,(int a),(a),return)
 SDL_DYNAPI_PROC(SDL_SensorType,SDL_SensorGetDeviceType,(int a),(a),return)
 SDL_DYNAPI_PROC(int,SDL_SensorGetDeviceNonPortableType,(int a),(a),return)
-SDL_DYNAPI_PROC(SDL_SensorID,SDL_SensorGetDeviceInstanceID,(int a),(a),return)
+SDL_DYNAPI_PROC(SDL2_SensorID,SDL_SensorGetDeviceInstanceID,(int a),(a),return)
 SDL_DYNAPI_PROC(SDL_Sensor*,SDL_SensorOpen,(int a),(a),return)
-SDL_DYNAPI_PROC(SDL_Sensor*,SDL_SensorFromInstanceID,(SDL_SensorID a),(a),return)
+SDL_DYNAPI_PROC(SDL_Sensor*,SDL_SensorFromInstanceID,(SDL2_SensorID a),(a),return)
 SDL_DYNAPI_PROC(const char*,SDL_SensorGetName,(SDL_Sensor *a),(a),return)
 SDL_DYNAPI_PROC(SDL_SensorType,SDL_SensorGetType,(SDL_Sensor *a),(a),return)
 SDL_DYNAPI_PROC(int,SDL_SensorGetNonPortableType,(SDL_Sensor *a),(a),return)
-SDL_DYNAPI_PROC(SDL_SensorID,SDL_SensorGetInstanceID,(SDL_Sensor *a),(a),return)
+SDL_DYNAPI_PROC(SDL2_SensorID,SDL_SensorGetInstanceID,(SDL_Sensor *a),(a),return)
 SDL_DYNAPI_PROC(int,SDL_SensorGetData,(SDL_Sensor *a, float *b, int c),(a,b,c),return)
 SDL_DYNAPI_PROC(void,SDL_SensorClose,(SDL_Sensor *a),(a),)
 SDL_DYNAPI_PROC(void,SDL_SensorUpdate,(void),(),)
diff --git a/src/sdl2_compat.c b/src/sdl2_compat.c
index ca28208..5148917 100644
--- a/src/sdl2_compat.c
+++ b/src/sdl2_compat.c
@@ -3698,7 +3698,20 @@ SDL_JoystickGetDeviceInstanceID(int idx)
 {
     /* this counts on a Uint32 not overflowing an Sint32. */
     const SDL_JoystickID jid = GetJoystickInstanceFromIndex(idx);
-    return (SDL2_JoystickID) (jid ? jid : -1);
+    if (!jid) {
+        return -1;
+    }
+    return (SDL2_JoystickID)jid;
+}
+
+DECLSPEC SDL2_JoystickID SDLCALL
+SDL_JoystickInstanceID(SDL_Joystick *joystick)
+{
+    const SDL_JoystickID jid = SDL3_GetJoystickInstanceID(joystick);
+    if (!jid) {
+        return -1;
+    }
+    return (SDL2_JoystickID)jid;
 }
 
 DECLSPEC int SDLCALL
@@ -3814,7 +3827,20 @@ SDL_SensorGetDeviceInstanceID(int idx)
 {
     /* this counts on a Uint32 not overflowing an Sint32. */
     const SDL_SensorID sid = GetSensorInstanceFromIndex(idx);
-    return (SDL2_SensorID) (sid ? sid : -1);
+    if (!sid) {
+        return -1;
+    }
+    return (SDL2_SensorID)sid;
+}
+
+DECLSPEC SDL2_SensorID SDLCALL
+SDL_SensorGetInstanceID(SDL_Sensor *sensor)
+{
+    const SDL_SensorID sid = SDL3_GetSensorInstanceID(sensor);
+    if (!sid) {
+        return -1;
+    }
+    return (SDL2_SensorID)sid;
 }
 
 DECLSPEC SDL_Sensor* SDLCALL
diff --git a/src/sdl3_syms.h b/src/sdl3_syms.h
index bec9da0..f578a99 100644
--- a/src/sdl3_syms.h
+++ b/src/sdl3_syms.h
@@ -205,7 +205,7 @@ SDL3_SYM_RENAMED(SDL_JoystickGUID,JoystickGetGUID,GetJoystickGUID,(SDL_Joystick
 SDL3_SYM_RENAMED(void,JoystickGetGUIDString,GetJoystickGUIDString,(SDL_JoystickGUID a, char *b, int c),(a,b,c),)
 SDL3_SYM_RENAMED(SDL_JoystickGUID,JoystickGetGUIDFromString,GetJoystickGUIDFromString,(const char *a),(a),return)
 SDL3_SYM_RENAMED(SDL_bool,JoystickGetAttached,JoystickConnected,(SDL_Joystick *a),(a),return)
-SDL3_SYM_RENAMED(SDL_JoystickID,JoystickInstanceID,GetJoystickInstanceID,(SDL_Joystick *a),(a),return)
+SDL3_SYM(SDL_JoystickID,GetJoystickInstanceID,(SDL_Joystick *a),(a),return)
 SDL3_SYM_RENAMED(int,JoystickNumAxes,GetNumJoystickAxes,(SDL_Joystick *a),(a),return)
 SDL3_SYM_RENAMED(int,JoystickNumHats,GetNumJoystickHats,(SDL_Joystick *a),(a),return)
 SDL3_SYM_RENAMED(int,JoystickNumButtons,GetNumJoystickButtons,(SDL_Joystick *a),(a),return)
@@ -667,7 +667,7 @@ SDL3_SYM_RENAMED(SDL_Sensor*,SensorFromInstanceID,GetSensorFromInstanceID,(SDL_S
 SDL3_SYM_RENAMED(const char*,SensorGetName,GetSensorName,(SDL_Sensor *a),(a),return)
 SDL3_SYM_RENAMED(SDL_SensorType,SensorGetType,GetSensorType,(SDL_Sensor *a),(a),return)
 SDL3_SYM_RENAMED(int,SensorGetNonPortableType,GetSensorNonPortableType,(SDL_Sensor *a),(a),return)
-SDL3_SYM_RENAMED(SDL_SensorID,SensorGetInstanceID,GetSensorInstanceID,(SDL_Sensor *a),(a),return)
+SDL3_SYM(SDL_SensorID,GetSensorInstanceID,(SDL_Sensor *a),(a),return)
 SDL3_SYM_RENAMED(int,SensorGetData,GetSensorData,(SDL_Sensor *a, float *b, int c),(a,b,c),return)
 SDL3_SYM_RENAMED(void,SensorClose,CloseSensor,(SDL_Sensor *a),(a),)
 SDL3_SYM_RENAMED(void,SensorUpdate,UpdateSensors,(void),(),)