From 871ef4491abdde3a1a04da0fdf180f2b02bdf8a6 Mon Sep 17 00:00:00 2001 From: Marcus Meissner Date: Mon, 5 Jan 2004 21:11:25 +0000 Subject: [PATCH] Handle DIJOYSTATE and DIJOYSTATE2 structs, fail on unknown sizes. --- dlls/dinput/joystick/linux.c | 5 +++-- dlls/dinput/joystick/linuxinput.c | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/dlls/dinput/joystick/linux.c b/dlls/dinput/joystick/linux.c index cae500aa9d8..6a523c1d41d 100644 --- a/dlls/dinput/joystick/linux.c +++ b/dlls/dinput/joystick/linux.c @@ -82,7 +82,7 @@ struct JoystickImpl LONG lMin,lMax,deadzone; LPDIDEVICEOBJECTDATA data_queue; int queue_head, queue_tail, queue_len; - DIJOYSTATE js; + DIJOYSTATE2 js; }; static GUID DInput_Wine_Joystick_GUID = { /* 9e573ed9-7734-11d2-8d4a-23903fb6bdf7 */ @@ -368,8 +368,9 @@ static HRESULT WINAPI JoystickAImpl_GetDeviceState( joy_polldev(This); TRACE("(this=%p,0x%08lx,%p)\n",This,len,ptr); - if (len != sizeof(DIJOYSTATE)) { + if ((len != sizeof(DIJOYSTATE)) && (len != sizeof(DIJOYSTATE2))) { FIXME("len %ld is not sizeof(DIJOYSTATE), unsupported format.\n",len); + return E_FAIL; } memcpy(ptr,&(This->js),len); This->queue_head = 0; diff --git a/dlls/dinput/joystick/linuxinput.c b/dlls/dinput/joystick/linuxinput.c index 4f71a93405c..541b04100bf 100644 --- a/dlls/dinput/joystick/linuxinput.c +++ b/dlls/dinput/joystick/linuxinput.c @@ -98,7 +98,7 @@ struct JoystickImpl HANDLE hEvent; LPDIDEVICEOBJECTDATA data_queue; int queue_head, queue_tail, queue_len; - DIJOYSTATE js; + DIJOYSTATE2 js; /* data returned by the EVIOCGABS() ioctl */ int axes[ABS_MAX+1][5]; @@ -561,8 +561,9 @@ static HRESULT WINAPI JoystickAImpl_GetDeviceState( joy_polldev(This); TRACE("(this=%p,0x%08lx,%p)\n",This,len,ptr); - if (len != sizeof(DIJOYSTATE)) { - FIXME("len %ld is not sizeof(DIJOYSTATE), unsupported format.\n",len); + if ((len != sizeof(DIJOYSTATE)) && (len != sizeof(DIJOYSTATE2))) { + FIXME("len %ld is not sizeof(DIJOYSTATE) or DIJOYSTATE2, unsupported format.\n",len); + return E_FAIL; } memcpy(ptr,&(This->js),len); This->queue_head = 0;