Handle DIJOYSTATE and DIJOYSTATE2 structs, fail on unknown sizes.
diff --git a/dlls/dinput/joystick/linux.c b/dlls/dinput/joystick/linux.c
index cae500a..6a523c1 100644
--- a/dlls/dinput/joystick/linux.c
+++ b/dlls/dinput/joystick/linux.c
@@ -82,7 +82,7 @@
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 @@
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 4f71a93..541b041 100644
--- a/dlls/dinput/joystick/linuxinput.c
+++ b/dlls/dinput/joystick/linuxinput.c
@@ -98,7 +98,7 @@
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 @@
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;