aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/os/io.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2010-11-15 16:51:22 +0000
committermarha <marha@users.sourceforge.net>2010-11-15 16:51:22 +0000
commitf586b49ae23c573681b939ca44b3f418c83c84b2 (patch)
treeffafe2da4517c5121ab4a8c64966e72829147215 /xorg-server/os/io.c
parent728ff03357b2dfd7048ab093183a239a0ba044c4 (diff)
parent3a82f8a35b2c6d094cf9d0d5a3ccb9dd9b85f626 (diff)
downloadvcxsrv-f586b49ae23c573681b939ca44b3f418c83c84b2.tar.gz
vcxsrv-f586b49ae23c573681b939ca44b3f418c83c84b2.tar.bz2
vcxsrv-f586b49ae23c573681b939ca44b3f418c83c84b2.zip
svn merge "^/branches/released" .
Solved mouse motion bug in new version of dix/getevents.c
Diffstat (limited to 'xorg-server/os/io.c')
-rw-r--r--xorg-server/os/io.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/xorg-server/os/io.c b/xorg-server/os/io.c
index 21d2cf75c..d2eb04649 100644
--- a/xorg-server/os/io.c
+++ b/xorg-server/os/io.c
@@ -410,16 +410,29 @@ ReadRequestFromClient(ClientPtr client)
else
needed = sizeof(xReq);
}
- oci->lenLastReq = needed;
/* If there are bytes to ignore, ignore them now. */
if (oci->ignoreBytes > 0) {
assert(needed == oci->ignoreBytes || needed == oci->size);
- oci->ignoreBytes -= gotnow;
- needed = gotnow = 0;
+ /*
+ * The _XSERVTransRead call above may return more or fewer bytes than we
+ * want to ignore. Ignore the smaller of the two sizes.
+ */
+ if (gotnow < needed) {
+ oci->ignoreBytes -= gotnow;
+ oci->bufptr += gotnow;
+ gotnow = 0;
+ } else {
+ oci->ignoreBytes -= needed;
+ oci->bufptr += needed;
+ gotnow -= needed;
+ }
+ needed = 0;
}
+ oci->lenLastReq = needed;
+
/*
* Check to see if client has at least one whole request in the
* buffer beyond the request we're returning to the caller.