dinput: Don't try to create non existing device.

This commit is contained in:
Vitaliy Margolen 2007-08-19 22:26:19 -06:00 committed by Alexandre Julliard
parent 55b63fe095
commit f47c63a1f9
1 changed files with 41 additions and 28 deletions

View File

@ -505,24 +505,31 @@ static HRESULT joydev_create_deviceA(IDirectInputImpl *dinput, REFGUID rguid, RE
find_joydevs(); find_joydevs();
if ((index = get_joystick_index(rguid)) < MAX_JOYDEV) { if ((index = get_joystick_index(rguid)) < MAX_JOYDEV &&
if ((riid == NULL) || have_joydevs && index < have_joydevs)
IsEqualGUID(&IID_IDirectInputDeviceA,riid) || {
IsEqualGUID(&IID_IDirectInputDevice2A,riid) || if ((riid == NULL) ||
IsEqualGUID(&IID_IDirectInputDevice7A,riid) || IsEqualGUID(&IID_IDirectInputDeviceA, riid) ||
IsEqualGUID(&IID_IDirectInputDevice8A,riid)) { IsEqualGUID(&IID_IDirectInputDevice2A, riid) ||
*pdev = (IDirectInputDeviceA*) alloc_device(rguid, &JoystickAvt, dinput, index); IsEqualGUID(&IID_IDirectInputDevice7A, riid) ||
TRACE("Creating a Joystick device (%p)\n", *pdev); IsEqualGUID(&IID_IDirectInputDevice8A, riid))
if (*pdev==0) { {
ERR("out of memory\n"); *pdev = (IDirectInputDeviceA*) alloc_device(rguid, &JoystickAvt, dinput, index);
return DIERR_OUTOFMEMORY; 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; return DIERR_NOINTERFACE;
}
} }
WARN("invalid device GUID\n");
return DIERR_DEVICENOTREG; return DIERR_DEVICENOTREG;
} }
@ -533,24 +540,30 @@ static HRESULT joydev_create_deviceW(IDirectInputImpl *dinput, REFGUID rguid, RE
find_joydevs(); find_joydevs();
if ((index = get_joystick_index(rguid)) < MAX_JOYDEV) { if ((index = get_joystick_index(rguid)) < MAX_JOYDEV &&
if ((riid == NULL) || have_joydevs && index < have_joydevs)
IsEqualGUID(&IID_IDirectInputDeviceW,riid) || {
IsEqualGUID(&IID_IDirectInputDevice2W,riid) || if ((riid == NULL) ||
IsEqualGUID(&IID_IDirectInputDevice7W,riid) || IsEqualGUID(&IID_IDirectInputDeviceW, riid) ||
IsEqualGUID(&IID_IDirectInputDevice8W,riid)) { IsEqualGUID(&IID_IDirectInputDevice2W, riid) ||
*pdev = (IDirectInputDeviceW*) alloc_device(rguid, &JoystickWvt, dinput, index); IsEqualGUID(&IID_IDirectInputDevice7W, riid) ||
TRACE("Creating a Joystick device (%p)\n", *pdev); IsEqualGUID(&IID_IDirectInputDevice8W, riid))
if (*pdev==0) { {
ERR("out of memory\n"); *pdev = (IDirectInputDeviceW*) alloc_device(rguid, &JoystickWvt, dinput, index);
return DIERR_OUTOFMEMORY; 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; WARN("no interface\n");
} else {
return DIERR_NOINTERFACE; return DIERR_NOINTERFACE;
}
} }
WARN("invalid device GUID\n");
return DIERR_DEVICENOTREG; return DIERR_DEVICENOTREG;
} }