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

Peter Hutterer peter.hutterer at who-t.net
Thu Sep 3 15:43:00 PDT 2009


On Wed, Sep 02, 2009 at 10:22:59AM -0500, Donald Kayser wrote:
> 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

Thank you, pushed as fa997144458527856b71fa162a105a46af8e688a.

Cheers,
  Peter


More information about the xorg-devel mailing list