PATCH: dinput joystick
Marcus Meissner
marcus at jet.franken.de
Sat Jan 3 04:56:38 CST 2004
Hi,
Bugreport 1684 reports that some programs use DIJOYSTATE2 structure in GetDeviceState.
No additional data is put into that structure, but it could now handle
force feedback, acceleration and velocity.
Ciao, Marcus
Changelog:
Handle DIJOYSTATE and DIJOYSTATE2 structs, fail on unknown sizes.
Index: dlls/dinput/joystick/linux.c
===================================================================
RCS file: /home/wine/wine/dlls/dinput/joystick/linux.c,v
retrieving revision 1.18
diff -u -r1.18 linux.c
--- dlls/dinput/joystick/linux.c 30 Oct 2003 22:48:04 -0000 1.18
+++ dlls/dinput/joystick/linux.c 3 Jan 2004 10:54:24 -0000
@@ -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;
Index: dlls/dinput/joystick/linuxinput.c
===================================================================
RCS file: /home/wine/wine/dlls/dinput/joystick/linuxinput.c,v
retrieving revision 1.19
diff -u -r1.19 linuxinput.c
--- dlls/dinput/joystick/linuxinput.c 30 Oct 2003 22:48:04 -0000 1.19
+++ dlls/dinput/joystick/linuxinput.c 3 Jan 2004 10:54:24 -0000
@@ -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;
--
More information about the wine-patches
mailing list