PATCH xf86-input-mouse: signed/unsigned fixes for delta x,y movement

Donald Kayser xorg at kayser.net
Wed Sep 2 08:22:59 PDT 2009


Changed the cast of (char) to (signed char) while computing delta x  
and delta y mouse movements. The C standard does not define compiler  
behavior, and currently with PPC builds, the (char) cast is unsigned.  
To guarantee that the compiler will generate signed values, the cast  
has been changed

Signed-off-by: Donald Kayser <xorg at kayser.net>
---
  src/mouse.c |   20 ++++++++++----------
  1 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/mouse.c b/src/mouse.c
index aff2512..339ce4d 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 */
@@ -1311,14 +1311,14 @@ MouseReadInput(InputInfoPtr pInfo)
  	    buttons =  (pMse->lastButtons & (8 + 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_MSC:		/* Mouse Systems Corp */
  	    buttons = (~pBuf[0]) & 0x07;
-	    dx =    (char)(pBuf[1]) + (char)(pBuf[3]);
-	    dy = - ((char)(pBuf[2]) + (char)(pBuf[4]));
+	    dx =    (signed char)(pBuf[1]) + (signed char)(pBuf[3]);
+	    dy = - ((signed char)(pBuf[2]) + (signed char)(pBuf[4]));
  	    break;

  	case PROT_MMHIT:	/* MM_HitTablet */
@@ -1346,8 +1346,8 @@ MouseReadInput(InputInfoPtr pInfo)

  	case PROT_BM:		/* BusMouse */
  	    buttons = (~pBuf[0]) & 0x07;
-	    dx =   (char)pBuf[1];
-	    dy = - (char)pBuf[2];
+	    dx =   (signed char)pBuf[1];
+	    dy = - (signed char)pBuf[2];
  	    break;

  	case PROT_PS2:		/* PS/2 mouse */
@@ -1511,8 +1511,8 @@ MouseReadInput(InputInfoPtr pInfo)
              buttons = ((int)(pBuf[0] & 0x20) >> 3)
                        | ((int)(pBuf[0] & 0x10) >> 4)
                        | ((int)(pBuf[3] & 0x10) >> 3);
-            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));
  	    dz = (pBuf[3] & 0x08) ? ((int)(pBuf[3] & 0x0F) - 0x10) :
                                      ((int)(pBuf[3] & 0x0F));
  	    break;
-- 
1.5.6.5



More information about the xorg-devel mailing list