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;