[PATCH 6/7] winebus.sys: Move SDL function loading to a separate helper.

Rémi Bernon rbernon at codeweavers.com
Fri Aug 13 02:46:17 CDT 2021


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/winebus.sys/bus_sdl.c | 116 ++++++++++++++++++++-----------------
 1 file changed, 64 insertions(+), 52 deletions(-)

diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c
index 572b46b4114..d866fb0d8bb 100644
--- a/dlls/winebus.sys/bus_sdl.c
+++ b/dlls/winebus.sys/bus_sdl.c
@@ -968,6 +968,69 @@ void sdl_driver_unload( void )
     dlclose(sdl_handle);
 }
 
+static BOOL sdl_initialize(void)
+{
+    if (!(sdl_handle = dlopen(SONAME_LIBSDL2, RTLD_NOW)))
+    {
+        WARN("could not load %s\n", SONAME_LIBSDL2);
+        return FALSE;
+    }
+#define LOAD_FUNCPTR(f)                          \
+    if ((p##f = dlsym(sdl_handle, #f)) == NULL)  \
+    {                                            \
+        WARN("could not find symbol %s\n", #f);  \
+        goto failed;                             \
+    }
+    LOAD_FUNCPTR(SDL_GetError);
+    LOAD_FUNCPTR(SDL_Init);
+    LOAD_FUNCPTR(SDL_JoystickClose);
+    LOAD_FUNCPTR(SDL_JoystickEventState);
+    LOAD_FUNCPTR(SDL_JoystickGetGUID);
+    LOAD_FUNCPTR(SDL_JoystickGetGUIDString);
+    LOAD_FUNCPTR(SDL_JoystickInstanceID);
+    LOAD_FUNCPTR(SDL_JoystickName);
+    LOAD_FUNCPTR(SDL_JoystickNumAxes);
+    LOAD_FUNCPTR(SDL_JoystickOpen);
+    LOAD_FUNCPTR(SDL_WaitEvent);
+    LOAD_FUNCPTR(SDL_JoystickNumButtons);
+    LOAD_FUNCPTR(SDL_JoystickNumBalls);
+    LOAD_FUNCPTR(SDL_JoystickNumHats);
+    LOAD_FUNCPTR(SDL_JoystickGetAxis);
+    LOAD_FUNCPTR(SDL_JoystickGetHat);
+    LOAD_FUNCPTR(SDL_IsGameController);
+    LOAD_FUNCPTR(SDL_GameControllerClose);
+    LOAD_FUNCPTR(SDL_GameControllerGetAxis);
+    LOAD_FUNCPTR(SDL_GameControllerGetButton);
+    LOAD_FUNCPTR(SDL_GameControllerName);
+    LOAD_FUNCPTR(SDL_GameControllerOpen);
+    LOAD_FUNCPTR(SDL_GameControllerEventState);
+    LOAD_FUNCPTR(SDL_HapticClose);
+    LOAD_FUNCPTR(SDL_HapticDestroyEffect);
+    LOAD_FUNCPTR(SDL_HapticNewEffect);
+    LOAD_FUNCPTR(SDL_HapticOpenFromJoystick);
+    LOAD_FUNCPTR(SDL_HapticQuery);
+    LOAD_FUNCPTR(SDL_HapticRumbleInit);
+    LOAD_FUNCPTR(SDL_HapticRumblePlay);
+    LOAD_FUNCPTR(SDL_HapticRumbleSupported);
+    LOAD_FUNCPTR(SDL_HapticRunEffect);
+    LOAD_FUNCPTR(SDL_HapticStopAll);
+    LOAD_FUNCPTR(SDL_JoystickIsHaptic);
+    LOAD_FUNCPTR(SDL_memset);
+    LOAD_FUNCPTR(SDL_GameControllerAddMapping);
+    LOAD_FUNCPTR(SDL_RegisterEvents);
+    LOAD_FUNCPTR(SDL_PushEvent);
+#undef LOAD_FUNCPTR
+    pSDL_JoystickGetProduct = dlsym(sdl_handle, "SDL_JoystickGetProduct");
+    pSDL_JoystickGetProductVersion = dlsym(sdl_handle, "SDL_JoystickGetProductVersion");
+    pSDL_JoystickGetVendor = dlsym(sdl_handle, "SDL_JoystickGetVendor");
+    return TRUE;
+
+failed:
+    dlclose(sdl_handle);
+    sdl_handle = NULL;
+    return FALSE;
+}
+
 NTSTATUS sdl_driver_init(void)
 {
     static const WCHAR controller_modeW[] = {'M','a','p',' ','C','o','n','t','r','o','l','l','e','r','s',0};
@@ -976,57 +1039,7 @@ NTSTATUS sdl_driver_init(void)
     HANDLE events[2];
     DWORD result;
 
-    if (sdl_handle == NULL)
-    {
-        sdl_handle = dlopen(SONAME_LIBSDL2, RTLD_NOW);
-        if (!sdl_handle) {
-            WARN("could not load %s\n", SONAME_LIBSDL2);
-            return STATUS_UNSUCCESSFUL;
-        }
-#define LOAD_FUNCPTR(f) if((p##f = dlsym(sdl_handle, #f)) == NULL){WARN("Can't find symbol %s\n", #f); goto sym_not_found;}
-        LOAD_FUNCPTR(SDL_GetError);
-        LOAD_FUNCPTR(SDL_Init);
-        LOAD_FUNCPTR(SDL_JoystickClose);
-        LOAD_FUNCPTR(SDL_JoystickEventState);
-        LOAD_FUNCPTR(SDL_JoystickGetGUID);
-        LOAD_FUNCPTR(SDL_JoystickGetGUIDString);
-        LOAD_FUNCPTR(SDL_JoystickInstanceID);
-        LOAD_FUNCPTR(SDL_JoystickName);
-        LOAD_FUNCPTR(SDL_JoystickNumAxes);
-        LOAD_FUNCPTR(SDL_JoystickOpen);
-        LOAD_FUNCPTR(SDL_WaitEvent);
-        LOAD_FUNCPTR(SDL_JoystickNumButtons);
-        LOAD_FUNCPTR(SDL_JoystickNumBalls);
-        LOAD_FUNCPTR(SDL_JoystickNumHats);
-        LOAD_FUNCPTR(SDL_JoystickGetAxis);
-        LOAD_FUNCPTR(SDL_JoystickGetHat);
-        LOAD_FUNCPTR(SDL_IsGameController);
-        LOAD_FUNCPTR(SDL_GameControllerClose);
-        LOAD_FUNCPTR(SDL_GameControllerGetAxis);
-        LOAD_FUNCPTR(SDL_GameControllerGetButton);
-        LOAD_FUNCPTR(SDL_GameControllerName);
-        LOAD_FUNCPTR(SDL_GameControllerOpen);
-        LOAD_FUNCPTR(SDL_GameControllerEventState);
-        LOAD_FUNCPTR(SDL_HapticClose);
-        LOAD_FUNCPTR(SDL_HapticDestroyEffect);
-        LOAD_FUNCPTR(SDL_HapticNewEffect);
-        LOAD_FUNCPTR(SDL_HapticOpenFromJoystick);
-        LOAD_FUNCPTR(SDL_HapticQuery);
-        LOAD_FUNCPTR(SDL_HapticRumbleInit);
-        LOAD_FUNCPTR(SDL_HapticRumblePlay);
-        LOAD_FUNCPTR(SDL_HapticRumbleSupported);
-        LOAD_FUNCPTR(SDL_HapticRunEffect);
-        LOAD_FUNCPTR(SDL_HapticStopAll);
-        LOAD_FUNCPTR(SDL_JoystickIsHaptic);
-        LOAD_FUNCPTR(SDL_memset);
-        LOAD_FUNCPTR(SDL_GameControllerAddMapping);
-        LOAD_FUNCPTR(SDL_RegisterEvents);
-        LOAD_FUNCPTR(SDL_PushEvent);
-#undef LOAD_FUNCPTR
-        pSDL_JoystickGetProduct = dlsym(sdl_handle, "SDL_JoystickGetProduct");
-        pSDL_JoystickGetProductVersion = dlsym(sdl_handle, "SDL_JoystickGetProductVersion");
-        pSDL_JoystickGetVendor = dlsym(sdl_handle, "SDL_JoystickGetVendor");
-    }
+    if (!sdl_handle && !sdl_initialize()) return STATUS_UNSUCCESSFUL;
 
     map_controllers = check_bus_option(&controller_mode, 1);
 
@@ -1052,7 +1065,6 @@ NTSTATUS sdl_driver_init(void)
     }
     CloseHandle(events[1]);
 
-sym_not_found:
     dlclose(sdl_handle);
     sdl_handle = NULL;
     return STATUS_UNSUCCESSFUL;
-- 
2.32.0




More information about the wine-devel mailing list