keys: fix signed overflow
[vlc.git] / modules / video_output / xcb / keysym.c
index 3a285d2..ad4e31c 100644 (file)
@@ -5,20 +5,20 @@
 /*****************************************************************************
  * Copyright © 2009 Rémi Denis-Courmont
  *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
  *
- * This library is distributed in the hope that it will be useful,
+ * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
  *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- ****************************************************************************/
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
 
 #define _GNU_SOURCE 1
 #include <stdio.h>
@@ -32,18 +32,19 @@ struct keysym
 {
     char xname[32];
     char uname[64];
-    int32_t xsym;
-    int32_t usym;
+    uint32_t xsym;
+    uint32_t usym;
 };
 
 static int cmpkey (const void *va, const void *vb)
 {
     const struct keysym *ka = va, *kb = vb;
 
-#if (INT_MAX < 0x7fffffff)
-# error Oups!
-#endif
-    return ka->xsym - kb->xsym;
+    if (ka->xsym > kb->xsym)
+        return +1;
+    if (ka->xsym < kb->xsym)
+        return -1;
+    return 0;
 }
 
 static void printkey (const void *node, const VISIT which, const int depth)
@@ -79,7 +80,7 @@ static int parse (FILE *in)
             abort ();
 
         int val = sscanf (line,
-                          "#define XK_%31s %"SCNi32" /*%*cU+%"SCNx32" %63[^*]",
+                          "#define XK_%31s %"SCNu32" /*%*cU+%"SCNx32" %63[^*]",
                           sym->xname, &sym->xsym, &sym->usym, sym->uname);
         if (val < 3)
         {