mirror of
https://github.com/X11Libre/xf86-input-mouse.git
synced 2026-03-24 09:34:07 +00:00
Fix mouse data buffering
Check remaining buffer size *before* reading a character from the device. Also keep extra characters in the static buffer until next invocation. Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
This commit is contained in:
@@ -86,6 +86,7 @@ OsMouseReadInput(InputInfoPtr pInfo)
|
||||
{
|
||||
MouseDevPtr pMse;
|
||||
static kd_event eventList[NUMEVENTS];
|
||||
static int remainder = 0;
|
||||
int n, c;
|
||||
kd_event *event = eventList;
|
||||
unsigned char *pBuf;
|
||||
@@ -94,13 +95,14 @@ OsMouseReadInput(InputInfoPtr pInfo)
|
||||
|
||||
XisbBlockDuration(pMse->buffer, -1);
|
||||
pBuf = (unsigned char *)eventList;
|
||||
n = 0;
|
||||
while ((c = XisbRead(pMse->buffer)) >= 0 && n < sizeof(eventList))
|
||||
n = remainder;
|
||||
while (n < sizeof(eventList) && (c = XisbRead(pMse->buffer)) >= 0)
|
||||
pBuf[n++] = (unsigned char)c;
|
||||
|
||||
if (n == 0)
|
||||
if (n == remainder)
|
||||
return;
|
||||
|
||||
remainder = n % sizeof(kd_event);
|
||||
n /= sizeof(kd_event);
|
||||
while( n-- ) {
|
||||
int buttons = pMse->lastButtons;
|
||||
@@ -126,6 +128,7 @@ OsMouseReadInput(InputInfoPtr pInfo)
|
||||
pMse->PostEvent(pInfo, buttons, dx, dy, 0, 0);
|
||||
++event;
|
||||
}
|
||||
memcpy(eventList, event, remainder);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user