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 <[email protected]>
---
  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

_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to