]> diplodocus.org Git - xorg-xinput/commitdiff
fix 64 bit issues with set-int-prop and list-props.
authorPeter Hutterer <peter.hutterer@who-t.net>
Tue, 14 Apr 2009 13:13:15 +0000 (09:13 -0400)
committerPeter Hutterer <peter.hutterer@who-t.net>
Tue, 14 Apr 2009 04:25:06 +0000 (14:25 +1000)
libX11 uses longs for 32 bit values, increasing hilarity on 64 bit machines.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
src/property.c

index e591013d22e15d0d9782bd74b3441109a56b6a48..6729929daf9c0cfb0fc9ce9c74db53988437fad3 100644 (file)
@@ -42,7 +42,7 @@ print_property(Display *dpy, XDevice* dev, Atom property)
     int                 act_format;
     unsigned long       nitems, bytes_after;
     unsigned char       *data, *ptr;
     int                 act_format;
     unsigned long       nitems, bytes_after;
     unsigned char       *data, *ptr;
-    int                 j, done = False;
+    int                 j, done = False, size;
 
     name = XGetAtomName(dpy, property);
     printf("\t%s (%ld):\t", name, property);
 
     name = XGetAtomName(dpy, property);
     printf("\t%s (%ld):\t", name, property);
@@ -55,6 +55,13 @@ print_property(Display *dpy, XDevice* dev, Atom property)
 
         ptr = data;
 
 
         ptr = data;
 
+        switch(act_format)
+        {
+            case 8: size = sizeof(char); break;
+            case 16: size = sizeof(short); break;
+            case 32: size = sizeof(long); break;
+        }
+
         for (j = 0; j < nitems; j++)
         {
             switch(act_type)
         for (j = 0; j < nitems; j++)
         {
             switch(act_type)
@@ -63,13 +70,13 @@ print_property(Display *dpy, XDevice* dev, Atom property)
                     switch(act_format)
                     {
                         case 8:
                     switch(act_format)
                     {
                         case 8:
-                            printf("%d", *((int8_t*)ptr));
+                            printf("%d", *((char*)ptr));
                             break;
                         case 16:
                             break;
                         case 16:
-                            printf("%d", *((int16_t*)ptr));
+                            printf("%d", *((short*)ptr));
                             break;
                         case 32:
                             break;
                         case 32:
-                            printf("%d", *((int32_t*)ptr));
+                            printf("%ld", *((long*)ptr));
                             break;
                     }
                     break;
                             break;
                     }
                     break;
@@ -93,7 +100,7 @@ print_property(Display *dpy, XDevice* dev, Atom property)
                     break;
             }
 
                     break;
             }
 
-            ptr += act_format/8;
+            ptr += size;
 
             if (j < nitems - 1)
                 printf(", ");
 
             if (j < nitems - 1)
                 printf(", ");
@@ -210,19 +217,19 @@ set_int_prop(Display *dpy, int argc, char** argv, char* n, char *desc)
         return EXIT_FAILURE;
     }
 
         return EXIT_FAILURE;
     }
 
-    data = calloc(nelements, format/8);
+    data = calloc(nelements, sizeof(long));
     for (i = 0; i < nelements; i++)
     {
         switch(format)
         {
             case 8:
     for (i = 0; i < nelements; i++)
     {
         switch(format)
         {
             case 8:
-                *(((int8_t*)data) + i) = atoi(argv[3 + i]);
+                *(((char*)data) + i) = atoi(argv[3 + i]);
                 break;
             case 16:
                 break;
             case 16:
-                *(((int16_t*)data) + i) = atoi(argv[3 + i]);
+                *(((short*)data) + i) = atoi(argv[3 + i]);
                 break;
             case 32:
                 break;
             case 32:
-                *(((int32_t*)data) + i) = atoi(argv[3 + i]);
+                *(((long*)data) + i) = atoi(argv[3 + i]);
                 break;
         }
     }
                 break;
         }
     }