[DINPUT] mouse and joystick GetDeviceData fix
Robert Reif
reif at earthlink.net
Tue Jan 25 11:12:52 CST 2005
Copy data structures one at a time using supplied size.
-------------- next part --------------
Index: dlls/dinput/joystick_linux.c
===================================================================
RCS file: /home/wine/wine/dlls/dinput/joystick_linux.c,v
retrieving revision 1.21
diff -u -p -r1.21 joystick_linux.c
--- dlls/dinput/joystick_linux.c 24 Jan 2005 11:29:44 -0000 1.21
+++ dlls/dinput/joystick_linux.c 25 Jan 2005 17:07:15 -0000
@@ -1060,18 +1060,14 @@ static HRESULT WINAPI JoystickAImpl_GetD
*entries = 0;
nqtail = This->queue_tail;
while (len) {
- DWORD span = ((This->queue_head < nqtail) ? This->queue_len : This->queue_head) - nqtail;
- if (span > len)
- span = len;
-
/* Copy the buffered data into the application queue */
- memcpy(dod + *entries, This->data_queue + nqtail, span * dodsize);
+ memcpy((char *)dod + *entries * dodsize, This->data_queue + nqtail, dodsize);
/* Advance position */
- nqtail += span;
+ nqtail++;
if (nqtail >= This->queue_len)
nqtail -= This->queue_len;
- *entries += span;
- len -= span;
+ *entries++;
+ len--;
}
}
Index: dlls/dinput/mouse.c
===================================================================
RCS file: /home/wine/wine/dlls/dinput/mouse.c,v
retrieving revision 1.16
diff -u -p -r1.16 mouse.c
--- dlls/dinput/mouse.c 4 Jan 2005 20:39:55 -0000 1.16
+++ dlls/dinput/mouse.c 25 Jan 2005 17:07:16 -0000
@@ -766,17 +766,14 @@ static HRESULT WINAPI SysMouseAImpl_GetD
*entries = 0;
nqtail = This->queue_tail;
while (len) {
- DWORD span = ((This->queue_head < nqtail) ? This->queue_len : This->queue_head) - nqtail;
- if (span > len)
- span = len;
-
/* Copy the buffered data into the application queue */
- memcpy(dod + *entries, This->data_queue + nqtail, span * dodsize);
+ memcpy((char *)dod + *entries * dodsize, This->data_queue + nqtail, dodsize);
/* Advance position */
- nqtail += span;
- if (nqtail >= This->queue_len) nqtail -= This->queue_len;
- *entries += span;
- len -= span;
+ nqtail++;
+ if (nqtail >= This->queue_len)
+ nqtail -= This->queue_len;
+ *entries++;
+ len--;
}
}
if (!(flags & DIGDD_PEEK))
More information about the wine-patches
mailing list