[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