[PATCH 2/5] dinput: Remove the need for ANSI enum_device callback.

Rémi Bernon rbernon at codeweavers.com
Mon May 31 03:23:56 CDT 2021


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/dinput/dinput_main.c         | 14 ++++----
 dlls/dinput/dinput_private.h      |  3 +-
 dlls/dinput/joystick_linux.c      | 58 ++-----------------------------
 dlls/dinput/joystick_linuxinput.c | 54 ++--------------------------
 dlls/dinput/joystick_osx.c        | 52 ++-------------------------
 dlls/dinput/keyboard.c            | 50 ++------------------------
 dlls/dinput/mouse.c               | 50 ++------------------------
 7 files changed, 18 insertions(+), 263 deletions(-)

diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
index 3d6d5732cfb..62e70e0535c 100644
--- a/dlls/dinput/dinput_main.c
+++ b/dlls/dinput/dinput_main.c
@@ -382,11 +382,11 @@ static HRESULT WINAPI IDirectInputWImpl_EnumDevices(
         return DIERR_NOTINITIALIZED;
 
     for (i = 0; i < ARRAY_SIZE(dinput_devices); i++) {
-        if (!dinput_devices[i]->enum_deviceW) continue;
+        if (!dinput_devices[i]->enum_device) continue;
         for (j = 0, r = S_OK; SUCCEEDED(r); j++) {
             devInstance.dwSize = sizeof(devInstance);
             TRACE("  - checking device %u ('%s')\n", i, dinput_devices[i]->name);
-            r = dinput_devices[i]->enum_deviceW(dwDevType, dwFlags, &devInstance, This->dwVersion, j);
+            r = dinput_devices[i]->enum_device(dwDevType, dwFlags, &devInstance, This->dwVersion, j);
             if (r == S_OK)
                 if (enum_callback_wrapper(lpCallback, &devInstance, pvRef) == DIENUM_STOP)
                     return S_OK;
@@ -825,14 +825,14 @@ static HRESULT WINAPI IDirectInput8WImpl_EnumDevicesBySemantics(
     {
         HRESULT enumSuccess;
 
-        if (!dinput_devices[i]->enum_deviceW) continue;
+        if (!dinput_devices[i]->enum_device) continue;
 
         for (j = 0, enumSuccess = S_OK; SUCCEEDED(enumSuccess); j++)
         {
             TRACE(" - checking device %u ('%s')\n", i, dinput_devices[i]->name);
 
             /* Default behavior is to enumerate attached game controllers */
-            enumSuccess = dinput_devices[i]->enum_deviceW(DI8DEVCLASS_GAMECTRL, DIEDFL_ATTACHEDONLY | dwFlags, &didevi, This->dwVersion, j);
+            enumSuccess = dinput_devices[i]->enum_device(DI8DEVCLASS_GAMECTRL, DIEDFL_ATTACHEDONLY | dwFlags, &didevi, This->dwVersion, j);
             if (enumSuccess == S_OK &&
                 should_enumerate_device(ptszUserName, dwFlags, &This->device_players, &didevi.guidInstance))
             {
@@ -998,13 +998,13 @@ static HRESULT WINAPI JoyConfig8Impl_GetConfig(IDirectInputJoyConfig8 *iface, UI
     /* Enumerate all joysticks in order */
     for (i = 0; i < ARRAY_SIZE(dinput_devices); i++)
     {
-        if (!dinput_devices[i]->enum_deviceA) continue;
+        if (!dinput_devices[i]->enum_device) continue;
 
         for (j = 0, r = S_OK; SUCCEEDED(r); j++)
         {
-            DIDEVICEINSTANCEA dev;
+            DIDEVICEINSTANCEW dev;
             dev.dwSize = sizeof(dev);
-            if ((r = dinput_devices[i]->enum_deviceA(DI8DEVCLASS_GAMECTRL, 0, &dev, di->dwVersion, j)) == S_OK)
+            if ((r = dinput_devices[i]->enum_device(DI8DEVCLASS_GAMECTRL, 0, &dev, di->dwVersion, j)) == S_OK)
             {
                 /* Only take into account the chosen id */
                 if (found == id)
diff --git a/dlls/dinput/dinput_private.h b/dlls/dinput/dinput_private.h
index 404eaad1d52..7e0f56c68df 100644
--- a/dlls/dinput/dinput_private.h
+++ b/dlls/dinput/dinput_private.h
@@ -55,8 +55,7 @@ extern const IDirectInput8AVtbl dinput8_a_vtbl DECLSPEC_HIDDEN;
 /* Function called by all devices that Wine supports */
 struct dinput_device {
     const char *name;
-    HRESULT (*enum_deviceA)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, DWORD version, int id);
-    HRESULT (*enum_deviceW)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id);
+    HRESULT (*enum_device)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id);
     HRESULT (*create_device)(IDirectInputImpl *dinput, REFGUID rguid, IDirectInputDevice8W **out);
 };
 
diff --git a/dlls/dinput/joystick_linux.c b/dlls/dinput/joystick_linux.c
index 32e355c47e8..5a88e643e07 100644
--- a/dlls/dinput/joystick_linux.c
+++ b/dlls/dinput/joystick_linux.c
@@ -369,59 +369,7 @@ static void fill_joystick_dideviceinstanceW(LPDIDEVICEINSTANCEW lpddi, DWORD ver
     lpddi->guidFFDriver = GUID_NULL;
 }
 
-static void fill_joystick_dideviceinstanceA(LPDIDEVICEINSTANCEA lpddi, DWORD version, int id)
-{
-    DIDEVICEINSTANCEW lpddiW;
-    DWORD dwSize = lpddi->dwSize;
-
-    lpddiW.dwSize = sizeof(lpddiW);
-    fill_joystick_dideviceinstanceW(&lpddiW, version, id);
-
-    TRACE("%d %p\n", dwSize, lpddi);
-    memset(lpddi, 0, dwSize);
-
-    /* Convert W->A */
-    lpddi->dwSize = dwSize;
-    lpddi->guidInstance = lpddiW.guidInstance;
-    lpddi->guidProduct = lpddiW.guidProduct;
-    lpddi->dwDevType = lpddiW.dwDevType;
-    strcpy(lpddi->tszInstanceName, joystick_devices[id].name);
-    strcpy(lpddi->tszProductName,  joystick_devices[id].name);
-    lpddi->guidFFDriver = lpddiW.guidFFDriver;
-    lpddi->wUsagePage = lpddiW.wUsagePage;
-    lpddi->wUsage = lpddiW.wUsage;
-}
-
-static HRESULT joydev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, DWORD version, int id)
-{
-    int fd = -1;
-
-    if (id >= find_joystick_devices()) return E_FAIL;
-
-    if (dwFlags & DIEDFL_FORCEFEEDBACK) {
-        WARN("force feedback not supported\n");
-        return S_FALSE;
-    }
-
-    if ((dwDevType == 0) ||
-	((dwDevType == DIDEVTYPE_JOYSTICK) && (version >= 0x0300 && version < 0x0800)) ||
-	(((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 0x0800))) {
-        /* check whether we have a joystick */
-        if ((fd = open(joystick_devices[id].device, O_RDONLY)) == -1)
-        {
-            WARN("open(%s, O_RDONLY) failed: %s\n", joystick_devices[id].device, strerror(errno));
-            return S_FALSE;
-        }
-        fill_joystick_dideviceinstanceA( lpddi, version, id );
-        close(fd);
-        TRACE("Enumerating the linux Joystick device: %s (%s)\n", joystick_devices[id].device, joystick_devices[id].name);
-        return S_OK;
-    }
-
-    return S_FALSE;
-}
-
-static HRESULT joydev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id)
+static HRESULT joydev_enum_device(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id)
 {
     int fd = -1;
 
@@ -616,8 +564,7 @@ static HRESULT joydev_create_device( IDirectInputImpl *dinput, REFGUID rguid, ID
 
 const struct dinput_device joystick_linux_device = {
   "Wine Linux joystick driver",
-  joydev_enum_deviceA,
-  joydev_enum_deviceW,
+  joydev_enum_device,
   joydev_create_device
 };
 
@@ -877,7 +824,6 @@ const struct dinput_device joystick_linux_device = {
   "Wine Linux joystick driver",
   NULL,
   NULL,
-  NULL
 };
 
 #endif  /* HAVE_LINUX_22_JOYSTICK_API */
diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c
index 0b7a4e63c8f..488e9c04759 100644
--- a/dlls/dinput/joystick_linuxinput.c
+++ b/dlls/dinput/joystick_linuxinput.c
@@ -371,55 +371,7 @@ static void fill_joystick_dideviceinstanceW(LPDIDEVICEINSTANCEW lpddi, DWORD ver
     MultiByteToWideChar(CP_ACP, 0, joydevs[id].name, -1, lpddi->tszProductName, MAX_PATH);
 }
 
-static void fill_joystick_dideviceinstanceA(LPDIDEVICEINSTANCEA lpddi, DWORD version, int id)
-{
-    DIDEVICEINSTANCEW lpddiW;
-    DWORD dwSize = lpddi->dwSize;
-
-    lpddiW.dwSize = sizeof(lpddiW);
-    fill_joystick_dideviceinstanceW(&lpddiW, version, id);
-
-    TRACE("%d %p\n", dwSize, lpddi);
-    memset(lpddi, 0, dwSize);
-
-    /* Convert W->A */
-    lpddi->dwSize = dwSize;
-    lpddi->guidInstance = lpddiW.guidInstance;
-    lpddi->guidProduct = lpddiW.guidProduct;
-    lpddi->dwDevType = lpddiW.dwDevType;
-    lstrcpynA(lpddi->tszInstanceName, joydevs[id].name, MAX_PATH);
-    lstrcpynA(lpddi->tszProductName,  joydevs[id].name, MAX_PATH);
-    lpddi->guidFFDriver = lpddiW.guidFFDriver;
-    lpddi->wUsagePage = lpddiW.wUsagePage;
-    lpddi->wUsage = lpddiW.wUsage;
-}
-
-static HRESULT joydev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, DWORD version, int id)
-{
-  find_joydevs();
-
-  if (id >= have_joydevs) {
-    return E_FAIL;
-  }
-
-  if (!((dwDevType == 0) ||
-        ((dwDevType == DIDEVTYPE_JOYSTICK) && (version >= 0x0300 && version < 0x0800)) ||
-        (((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 0x0800))))
-    return S_FALSE;
-
-#ifndef HAVE_STRUCT_FF_EFFECT_DIRECTION
-  if (dwFlags & DIEDFL_FORCEFEEDBACK)
-    return S_FALSE;
-#endif
-
-  if (!(dwFlags & DIEDFL_FORCEFEEDBACK) || joydevs[id].has_ff) {
-    fill_joystick_dideviceinstanceA(lpddi, version, id);
-    return S_OK;
-  }
-  return S_FALSE;
-}
-
-static HRESULT joydev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id)
+static HRESULT joydev_enum_device(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id)
 {
   find_joydevs();
 
@@ -640,8 +592,7 @@ static HRESULT joydev_create_device( IDirectInputImpl *dinput, REFGUID rguid, ID
 
 const struct dinput_device joystick_linuxinput_device = {
   "Wine Linux-input joystick driver",
-  joydev_enum_deviceA,
-  joydev_enum_deviceW,
+  joydev_enum_device,
   joydev_create_device
 };
 
@@ -1318,7 +1269,6 @@ const struct dinput_device joystick_linuxinput_device = {
   "Wine Linux-input joystick driver",
   NULL,
   NULL,
-  NULL
 };
 
 #endif  /* HAS_PROPER_HEADER */
diff --git a/dlls/dinput/joystick_osx.c b/dlls/dinput/joystick_osx.c
index 38a708d4cae..6d37a476380 100644
--- a/dlls/dinput/joystick_osx.c
+++ b/dlls/dinput/joystick_osx.c
@@ -984,53 +984,7 @@ static DWORD make_vid_pid(IOHIDDeviceRef device)
     return MAKELONG(vendID, prodID);
 }
 
-static HRESULT joydev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, DWORD version, int id)
-{
-    IOHIDDeviceRef device;
-    BOOL is_joystick;
-
-    TRACE("dwDevType %u dwFlags 0x%08x version 0x%04x id %d\n", dwDevType, dwFlags, version, id);
-
-    if (id >= find_joystick_devices()) return E_FAIL;
-
-    device = get_device_ref(id);
-
-    if ((dwDevType == 0) ||
-    ((dwDevType == DIDEVTYPE_JOYSTICK) && (version >= 0x0300 && version < 0x0800)) ||
-    (((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 0x0800)))
-    {
-        if (dwFlags & DIEDFL_FORCEFEEDBACK) {
-            if(!device)
-                return S_FALSE;
-            if(get_ff(device, NULL) != S_OK)
-                return S_FALSE;
-        }
-        is_joystick = get_device_property_long(device, CFSTR(kIOHIDDeviceUsageKey)) == kHIDUsage_GD_Joystick;
-        /* Return joystick */
-        lpddi->guidInstance = DInput_Wine_OsX_Joystick_GUID;
-        lpddi->guidInstance.Data3 = id;
-        lpddi->guidProduct = DInput_PIDVID_Product_GUID;
-        lpddi->guidProduct.Data1 = make_vid_pid(device);
-        lpddi->dwDevType = get_device_type(version, is_joystick);
-        lpddi->dwDevType |= DIDEVTYPE_HID;
-        lpddi->wUsagePage = 0x01; /* Desktop */
-        if (is_joystick)
-            lpddi->wUsage = 0x04; /* Joystick */
-        else
-            lpddi->wUsage = 0x05; /* Game Pad */
-        sprintf(lpddi->tszInstanceName, "Joystick %d", id);
-
-        /* get the device name */
-        get_osx_device_name(id, lpddi->tszProductName, MAX_PATH);
-
-        lpddi->guidFFDriver = GUID_NULL;
-        return S_OK;
-    }
-
-    return S_FALSE;
-}
-
-static HRESULT joydev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id)
+static HRESULT joydev_enum_device(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id)
 {
     char name[MAX_PATH];
     char friendly[32];
@@ -1522,8 +1476,7 @@ static HRESULT WINAPI JoystickWImpl_SendForceFeedbackCommand(IDirectInputDevice8
 
 const struct dinput_device joystick_osx_device = {
   "Wine OS X joystick driver",
-  joydev_enum_deviceA,
-  joydev_enum_deviceW,
+  joydev_enum_device,
   joydev_create_device
 };
 
@@ -1700,7 +1653,6 @@ const struct dinput_device joystick_osx_device = {
   "Wine OS X joystick driver",
   NULL,
   NULL,
-  NULL
 };
 
 #endif /* HAVE_IOHIDMANAGERCREATE */
diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c
index 0e371e31b99..fc9dbdb2ed4 100644
--- a/dlls/dinput/keyboard.c
+++ b/dlls/dinput/keyboard.c
@@ -149,30 +149,6 @@ static DWORD get_keyboard_subtype(void)
     return dev_subtype;
 }
 
-static void fill_keyboard_dideviceinstanceA(LPDIDEVICEINSTANCEA lpddi, DWORD version, DWORD subtype) {
-    DWORD dwSize;
-    DIDEVICEINSTANCEA ddi;
-    
-    dwSize = lpddi->dwSize;
-
-    TRACE("%d %p\n", dwSize, lpddi);
-    
-    memset(lpddi, 0, dwSize);
-    memset(&ddi, 0, sizeof(ddi));
-
-    ddi.dwSize = dwSize;
-    ddi.guidInstance = GUID_SysKeyboard;/* DInput's GUID */
-    ddi.guidProduct = GUID_SysKeyboard;
-    if (version >= 0x0800)
-        ddi.dwDevType = DI8DEVTYPE_KEYBOARD | (subtype << 8);
-    else
-        ddi.dwDevType = DIDEVTYPE_KEYBOARD | (subtype << 8);
-    strcpy(ddi.tszInstanceName, "Keyboard");
-    strcpy(ddi.tszProductName, "Wine Keyboard");
-
-    memcpy(lpddi, &ddi, (dwSize < sizeof(ddi) ? dwSize : sizeof(ddi)));
-}
-
 static void fill_keyboard_dideviceinstanceW(LPDIDEVICEINSTANCEW lpddi, DWORD version, DWORD subtype) {
     DWORD dwSize;
     DIDEVICEINSTANCEW ddi;
@@ -197,28 +173,7 @@ static void fill_keyboard_dideviceinstanceW(LPDIDEVICEINSTANCEW lpddi, DWORD ver
     memcpy(lpddi, &ddi, (dwSize < sizeof(ddi) ? dwSize : sizeof(ddi)));
 }
  
-static HRESULT keyboarddev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, DWORD version, int id)
-{
-  if (id != 0)
-    return E_FAIL;
-
-  if (dwFlags & DIEDFL_FORCEFEEDBACK)
-    return S_FALSE;
-
-  if ((dwDevType == 0) ||
-      ((dwDevType == DIDEVTYPE_KEYBOARD) && (version < 0x0800)) ||
-      (((dwDevType == DI8DEVCLASS_KEYBOARD) || (dwDevType == DI8DEVTYPE_KEYBOARD)) && (version >= 0x0800))) {
-    TRACE("Enumerating the Keyboard device\n");
- 
-    fill_keyboard_dideviceinstanceA(lpddi, version, get_keyboard_subtype());
-    
-    return S_OK;
-  }
-
-  return S_FALSE;
-}
-
-static HRESULT keyboarddev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id)
+static HRESULT keyboarddev_enum_device(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id)
 {
   if (id != 0)
     return E_FAIL;
@@ -306,8 +261,7 @@ static HRESULT keyboarddev_create_device( IDirectInputImpl *dinput, REFGUID rgui
 
 const struct dinput_device keyboard_device = {
   "Wine keyboard driver",
-  keyboarddev_enum_deviceA,
-  keyboarddev_enum_deviceW,
+  keyboarddev_enum_device,
   keyboarddev_create_device
 };
 
diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c
index 09cfe945a50..22e40a60285 100644
--- a/dlls/dinput/mouse.c
+++ b/dlls/dinput/mouse.c
@@ -93,30 +93,6 @@ static void _dump_mouse_state(const DIMOUSESTATE2 *m_state)
     TRACE(")\n");
 }
 
-static void fill_mouse_dideviceinstanceA(LPDIDEVICEINSTANCEA lpddi, DWORD version) {
-    DWORD dwSize;
-    DIDEVICEINSTANCEA ddi;
-    
-    dwSize = lpddi->dwSize;
-
-    TRACE("%d %p\n", dwSize, lpddi);
-    
-    memset(lpddi, 0, dwSize);
-    memset(&ddi, 0, sizeof(ddi));
-
-    ddi.dwSize = dwSize;
-    ddi.guidInstance = GUID_SysMouse;/* DInput's GUID */
-    ddi.guidProduct = GUID_SysMouse;
-    if (version >= 0x0800)
-        ddi.dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_TRADITIONAL << 8);
-    else
-        ddi.dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL << 8);
-    strcpy(ddi.tszInstanceName, "Mouse");
-    strcpy(ddi.tszProductName, "Wine Mouse");
-
-    memcpy(lpddi, &ddi, (dwSize < sizeof(ddi) ? dwSize : sizeof(ddi)));
-}
-
 static void fill_mouse_dideviceinstanceW(LPDIDEVICEINSTANCEW lpddi, DWORD version) {
     DWORD dwSize;
     DIDEVICEINSTANCEW ddi;
@@ -141,28 +117,7 @@ static void fill_mouse_dideviceinstanceW(LPDIDEVICEINSTANCEW lpddi, DWORD versio
     memcpy(lpddi, &ddi, (dwSize < sizeof(ddi) ? dwSize : sizeof(ddi)));
 }
 
-static HRESULT mousedev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, DWORD version, int id)
-{
-    if (id != 0)
-        return E_FAIL;
-
-    if (dwFlags & DIEDFL_FORCEFEEDBACK)
-        return S_FALSE;
-
-    if ((dwDevType == 0) ||
-	((dwDevType == DIDEVTYPE_MOUSE) && (version < 0x0800)) ||
-	(((dwDevType == DI8DEVCLASS_POINTER) || (dwDevType == DI8DEVTYPE_MOUSE)) && (version >= 0x0800))) {
-	TRACE("Enumerating the mouse device\n");
-	
-	fill_mouse_dideviceinstanceA(lpddi, version);
-	
-	return S_OK;
-    }
-    
-    return S_FALSE;
-}
-
-static HRESULT mousedev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id)
+static HRESULT mousedev_enum_device(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id)
 {
     if (id != 0)
         return E_FAIL;
@@ -263,8 +218,7 @@ static HRESULT mousedev_create_device( IDirectInputImpl *dinput, REFGUID rguid,
 
 const struct dinput_device mouse_device = {
     "Wine mouse driver",
-    mousedev_enum_deviceA,
-    mousedev_enum_deviceW,
+    mousedev_enum_device,
     mousedev_create_device
 };
 
-- 
2.31.0




More information about the wine-devel mailing list