Vitaliy Margolen : dinput: Don't try to create non existing device (/dev/ js*).

Alexandre Julliard julliard at wine.codeweavers.com
Tue Aug 21 07:20:55 CDT 2007


Module: wine
Branch: master
Commit: e2e3d193516d5ddc9013e862bbe7e3dc974428c3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e2e3d193516d5ddc9013e862bbe7e3dc974428c3

Author: Vitaliy Margolen <wine-patches at kievinfo.com>
Date:   Mon Aug 20 22:06:54 2007 -0600

dinput: Don't try to create non existing device (/dev/js*).

---

 dlls/dinput/joystick_linux.c |   75 +++++++++++++++++++++++-------------------
 1 files changed, 41 insertions(+), 34 deletions(-)

diff --git a/dlls/dinput/joystick_linux.c b/dlls/dinput/joystick_linux.c
index f155f18..ef5b9f3 100644
--- a/dlls/dinput/joystick_linux.c
+++ b/dlls/dinput/joystick_linux.c
@@ -583,48 +583,55 @@ static unsigned short get_joystick_index(REFGUID guid)
 
 static HRESULT joydev_create_deviceA(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEA* pdev)
 {
-  unsigned short index;
-
-  if ((index = get_joystick_index(rguid)) < MAX_JOYSTICKS) {
-    if ((riid == NULL) ||
-	IsEqualGUID(&IID_IDirectInputDeviceA,riid) ||
-	IsEqualGUID(&IID_IDirectInputDevice2A,riid) ||
-	IsEqualGUID(&IID_IDirectInputDevice7A,riid) ||
-	IsEqualGUID(&IID_IDirectInputDevice8A,riid)) {
-      return alloc_device(rguid, &JoystickAvt, dinput, pdev, index);
-    } else {
-      WARN("no interface\n");
-      *pdev = 0;
-      return DIERR_NOINTERFACE;
+    unsigned short index;
+
+    find_joystick_devices();
+    *pdev = NULL;
+
+    if ((index = get_joystick_index(rguid)) < MAX_JOYSTICKS &&
+        joystick_devices_count && index < joystick_devices_count)
+    {
+        if ((riid == NULL) ||
+	    IsEqualGUID(&IID_IDirectInputDeviceA,  riid) ||
+	    IsEqualGUID(&IID_IDirectInputDevice2A, riid) ||
+	    IsEqualGUID(&IID_IDirectInputDevice7A, riid) ||
+	    IsEqualGUID(&IID_IDirectInputDevice8A, riid))
+        {
+            return alloc_device(rguid, &JoystickAvt, dinput, pdev, index);
+        }
+
+        WARN("no interface\n");
+        return DIERR_NOINTERFACE;
     }
-  }
 
-  WARN("invalid device GUID\n");
-  *pdev = 0;
-  return DIERR_DEVICENOTREG;
+    WARN("invalid device GUID\n");
+    return DIERR_DEVICENOTREG;
 }
 
 static HRESULT joydev_create_deviceW(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEW* pdev)
 {
-  unsigned short index;
-
-  if ((index = get_joystick_index(rguid)) < MAX_JOYSTICKS) {
-    if ((riid == NULL) ||
-	IsEqualGUID(&IID_IDirectInputDeviceW,riid) ||
-	IsEqualGUID(&IID_IDirectInputDevice2W,riid) ||
-	IsEqualGUID(&IID_IDirectInputDevice7W,riid) ||
-	IsEqualGUID(&IID_IDirectInputDevice8W,riid)) {
-      return alloc_device(rguid, &JoystickWvt, dinput, (LPDIRECTINPUTDEVICEA *)pdev, index);
-    } else {
-      WARN("no interface\n");
-      *pdev = 0;
-      return DIERR_NOINTERFACE;
+    unsigned short index;
+
+    find_joystick_devices();
+    *pdev = NULL;
+
+    if ((index = get_joystick_index(rguid)) < MAX_JOYSTICKS &&
+        joystick_devices_count && index < joystick_devices_count)
+    {
+        if ((riid == NULL) ||
+	    IsEqualGUID(&IID_IDirectInputDeviceW,  riid) ||
+	    IsEqualGUID(&IID_IDirectInputDevice2W, riid) ||
+	    IsEqualGUID(&IID_IDirectInputDevice7W, riid) ||
+	    IsEqualGUID(&IID_IDirectInputDevice8W, riid))
+        {
+            return alloc_device(rguid, &JoystickWvt, dinput, (LPDIRECTINPUTDEVICEA *)pdev, index);
+        }
+        WARN("no interface\n");
+        return DIERR_NOINTERFACE;
     }
-  }
 
-  WARN("invalid device GUID\n");
-  *pdev = 0;
-  return DIERR_DEVICENOTREG;
+    WARN("invalid device GUID\n");
+    return DIERR_DEVICENOTREG;
 }
 
 #undef MAX_JOYSTICKS




More information about the wine-cvs mailing list