[PATCH xserver] xf86ScaleAxis: support for high resolution devices
Dan Nicholson
dbn.lists at gmail.com
Fri Apr 9 08:41:15 PDT 2010
On Fri, Apr 9, 2010 at 7:51 AM, Benjamin Tissoires <tissoire at cena.fr> wrote:
> High resolution devices was generating integer overflow.
> For instance the wacom Cintiq 21UX has an axis value up to
> 87000. Thus the term (dSx * (Cx - Rxlow)) is greater than
> MAX_INT32.
>
> Using 64bits integer avoids such problem.
>
> Signed-off-by: Philippe Ribet <ribet at cena.fr>
> Signed-off-by: Benjamin Tissoires <tissoire at cena.fr>
> ---
> hw/xfree86/common/xf86Xinput.c | 6 +++---
> 1 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
> index 8229227..80bdd19 100644
> --- a/hw/xfree86/common/xf86Xinput.c
> +++ b/hw/xfree86/common/xf86Xinput.c
> @@ -1172,12 +1172,12 @@ xf86ScaleAxis(int Cx,
> int Rxlow )
> {
> int X;
> - int dSx = Sxhigh - Sxlow;
> - int dRx = Rxhigh - Rxlow;
> + int64_t dSx = Sxhigh - Sxlow;
> + int64_t dRx = Rxhigh - Rxlow;
Not sure, but would you not also need to change the function
parameters to int64_t? I guess you're just avoiding a cast below,
though. Also, could you explicitly include <stdint.h> instead of
getting it implicitly?
>
> dSx = Sxhigh - Sxlow;
Could you kill this redundant line while you're at it?
> if (dRx) {
> - X = ((dSx * (Cx - Rxlow)) / dRx) + Sxlow;
> + X = (int)(((dSx * (Cx - Rxlow)) / dRx) + Sxlow);
> }
> else {
> X = 0;
> --
> 1.6.6.1
--
Dan
More information about the xorg-devel
mailing list