[PATCH xserver resent] xf86ScaleAxis: support for high resolution devices
Benjamin Tissoires
tissoire at cena.fr
Wed Apr 14 08:27:51 PDT 2010
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 | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 7723ba6..dba3370 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -86,6 +86,7 @@
#include "windowstr.h" /* screenIsSaved */
#include <stdarg.h>
+#include <stdint.h> /* for int64_t */
#include <X11/Xpoll.h>
@@ -1177,12 +1178,11 @@ 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;
- dSx = Sxhigh - Sxlow;
if (dRx) {
- X = ((dSx * (Cx - Rxlow)) / dRx) + Sxlow;
+ X = (int)(((dSx * (Cx - Rxlow)) / dRx) + Sxlow);
}
else {
X = 0;
--
1.6.6.1
More information about the xorg-devel
mailing list