xf86-input-mouse signed/unsigned issue with Microsoft protocol

Donald Kayser xorg at kayser.net
Fri Aug 28 07:16:40 PDT 2009


I am developing under a PPC embedded system running 2.6.30.2 Linux,  
xserver from debian distribution of 7.3+19, xf86-input-mouse 1.3.0. I  
have a custom board that I am sending Microsoft mouse 3 byte protocol  
through a pipe to the input of xserver via the mouse driver. I was  
able to make small movements, all positive, but if I moved negative,  
the mouse would jump a large amount in the positive direction. I  
checked out from git and built the mouse driver and turned on debug to  
find out and it is not accepting negative numbers correctly in the  
case of PROT_MS. By changing the cast on lines 1304/1305 in mouse.c  
from (char) to (signed char), I fixed the problem. I don't know if  
this exists on other (non PPC) platforms.  I also noticed the  
potential for the same problem in a few more places. I am using gcc-4.3.

The source I have is from:
xf86-input-mouse-1.4.0-13-gf292f23

diff --git a/src/mouse.c b/src/mouse.c
index aff2512..b59a138 100644
--- a/src/mouse.c
+++ b/src/mouse.c
@@ -1301,8 +1301,8 @@ MouseReadInput(InputInfoPtr pInfo)
                 buttons = (pMse->lastButtons & 2)
                         | ((int)(pBuf[0] & 0x20) >> 3)
                         | ((int)(pBuf[0] & 0x10) >> 4);
-           dx = (char)(((pBuf[0] & 0x03) << 6) | (pBuf[1] & 0x3F));
-           dy = (char)(((pBuf[0] & 0x0C) << 4) | (pBuf[2] & 0x3F));
+           dx = (signed char)(((pBuf[0] & 0x03) << 6) | (pBuf[1] &  
0x3F));
+           dy = (signed char)(((pBuf[0] & 0x0C) << 4) | (pBuf[2] &  
0x3F));
             break;
         case PROT_GLIDE:        /* ALPS GlidePoint */
Donald Kayser


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.x.org/archives/xorg/attachments/20090828/9511c593/attachment.html>


More information about the xorg mailing list