Module: wine Branch: master Commit: f47c63a1f9ef7f110dc6bff2408cc6ff61eb419b URL: http://source.winehq.org/git/wine.git/?a=commit;h=f47c63a1f9ef7f110dc6bff240...
Author: Vitaliy Margolen wine-patches@kievinfo.com Date: Sun Aug 19 22:26:19 2007 -0600
dinput: Don't try to create non existing device.
---
dlls/dinput/joystick_linuxinput.c | 69 ++++++++++++++++++++++--------------- 1 files changed, 41 insertions(+), 28 deletions(-)
diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c index feeb118..f3fc11e 100644 --- a/dlls/dinput/joystick_linuxinput.c +++ b/dlls/dinput/joystick_linuxinput.c @@ -505,24 +505,31 @@ static HRESULT joydev_create_deviceA(IDirectInputImpl *dinput, REFGUID rguid, RE
find_joydevs();
- if ((index = get_joystick_index(rguid)) < MAX_JOYDEV) { - if ((riid == NULL) || - IsEqualGUID(&IID_IDirectInputDeviceA,riid) || - IsEqualGUID(&IID_IDirectInputDevice2A,riid) || - IsEqualGUID(&IID_IDirectInputDevice7A,riid) || - IsEqualGUID(&IID_IDirectInputDevice8A,riid)) { - *pdev = (IDirectInputDeviceA*) alloc_device(rguid, &JoystickAvt, dinput, index); - TRACE("Creating a Joystick device (%p)\n", *pdev); - if (*pdev==0) { - ERR("out of memory\n"); - return DIERR_OUTOFMEMORY; + if ((index = get_joystick_index(rguid)) < MAX_JOYDEV && + have_joydevs && index < have_joydevs) + { + if ((riid == NULL) || + IsEqualGUID(&IID_IDirectInputDeviceA, riid) || + IsEqualGUID(&IID_IDirectInputDevice2A, riid) || + IsEqualGUID(&IID_IDirectInputDevice7A, riid) || + IsEqualGUID(&IID_IDirectInputDevice8A, riid)) + { + *pdev = (IDirectInputDeviceA*) alloc_device(rguid, &JoystickAvt, dinput, index); + TRACE("Created a Joystick device (%p)\n", *pdev); + + if (*pdev == NULL) + { + ERR("out of memory\n"); + return DIERR_OUTOFMEMORY; + } + return DI_OK; } - return DI_OK; - } else { + + WARN("no interface\n"); return DIERR_NOINTERFACE; - } }
+ WARN("invalid device GUID\n"); return DIERR_DEVICENOTREG; }
@@ -533,24 +540,30 @@ static HRESULT joydev_create_deviceW(IDirectInputImpl *dinput, REFGUID rguid, RE
find_joydevs();
- if ((index = get_joystick_index(rguid)) < MAX_JOYDEV) { - if ((riid == NULL) || - IsEqualGUID(&IID_IDirectInputDeviceW,riid) || - IsEqualGUID(&IID_IDirectInputDevice2W,riid) || - IsEqualGUID(&IID_IDirectInputDevice7W,riid) || - IsEqualGUID(&IID_IDirectInputDevice8W,riid)) { - *pdev = (IDirectInputDeviceW*) alloc_device(rguid, &JoystickWvt, dinput, index); - TRACE("Creating a Joystick device (%p)\n", *pdev); - if (*pdev==0) { - ERR("out of memory\n"); - return DIERR_OUTOFMEMORY; + if ((index = get_joystick_index(rguid)) < MAX_JOYDEV && + have_joydevs && index < have_joydevs) + { + if ((riid == NULL) || + IsEqualGUID(&IID_IDirectInputDeviceW, riid) || + IsEqualGUID(&IID_IDirectInputDevice2W, riid) || + IsEqualGUID(&IID_IDirectInputDevice7W, riid) || + IsEqualGUID(&IID_IDirectInputDevice8W, riid)) + { + *pdev = (IDirectInputDeviceW*) alloc_device(rguid, &JoystickWvt, dinput, index); + TRACE("Created a Joystick device (%p)\n", *pdev); + + if (*pdev == NULL) + { + ERR("out of memory\n"); + return DIERR_OUTOFMEMORY; + } + return DI_OK; } - return DI_OK; - } else { + WARN("no interface\n"); return DIERR_NOINTERFACE; - } }
+ WARN("invalid device GUID\n"); return DIERR_DEVICENOTREG; }