diff options
author | Sascha Hlusiak <saschahlusiak@arcor.de> | 2008-03-30 13:21:22 +0200 |
---|---|---|
committer | Sascha Hlusiak <saschahlusiak@arcor.de> | 2008-03-30 13:21:22 +0200 |
commit | edcc8c26dfa3f89672a66c47665d89c7c9200b13 (patch) | |
tree | 72bf9fbe508b45daeaf4a0f28131a1ae3a854e9c /src | |
parent | fac2c42a01cf030a05d2305a01700f3677f6a8dc (diff) |
Fixed keymap size to 8-256 to prevent crash
Newer xservers don't like keymaps that are smaller than 248 keys.
Diffstat (limited to 'src')
-rw-r--r-- | src/jstk.h | 2 | ||||
-rw-r--r-- | src/jstk_key.c | 9 | ||||
-rw-r--r-- | src/jstk_options.c | 2 |
3 files changed, 9 insertions, 4 deletions
@@ -127,7 +127,7 @@ typedef struct _JoystickDevRec { } buttonmap; struct _KEYMAP { int size; - KeySym map[MAP_LENGTH]; + KeySym map[256-MIN_KEYCODE]; } keymap; AXIS axis[MAXAXES]; /* Configuration per axis */ diff --git a/src/jstk_key.c b/src/jstk_key.c index 42492c4..a9a6e0d 100644 --- a/src/jstk_key.c +++ b/src/jstk_key.c @@ -70,8 +70,12 @@ jstkInitKeys(DeviceIntPtr pJstk, JoystickDevPtr priv) DBG(1, xf86Msg(X_CONFIG, "Initializing Keyboard with %d keys\n", priv->keymap.size)); + for (i = 0; i < priv->keymap.size; i++) + { + DBG(6, xf86Msg(X_CONFIG, "Keymap [%d]: 0x%08X\n", MIN_KEYCODE+i,priv->keymap.map[i])); + } - memset(modMap, 0, sizeof modMap); + memset(modMap, 0, sizeof(modMap)); for (i = 0; i < priv->keymap.size; i++) { sym = priv->keymap.map[i]; @@ -84,7 +88,8 @@ jstkInitKeys(DeviceIntPtr pJstk, JoystickDevPtr priv) keySyms.map = priv->keymap.map; keySyms.mapWidth = 1; keySyms.minKeyCode = MIN_KEYCODE; - keySyms.maxKeyCode = MIN_KEYCODE + priv->keymap.size - 1; +/* keySyms.maxKeyCode = MIN_KEYCODE + priv->keymap.size - 1; */ + keySyms.maxKeyCode = MIN_KEYCODE + sizeof(priv->keymap.map)/sizeof(priv->keymap.map[0]) - 1; for (i = 0; i < priv->keymap.size; i++) { sym = priv->keymap.map[i]; diff --git a/src/jstk_options.c b/src/jstk_options.c index 24912b5..510c160 100644 --- a/src/jstk_options.c +++ b/src/jstk_options.c @@ -83,7 +83,7 @@ jstkGetKeyNumberInMap(JoystickDevPtr priv, for (j=0; j<priv->keymap.size; j++) if (priv->keymap.map[j] == keysym) break; - if (j > MAP_LENGTH+1) return 0; + if (j >= sizeof(priv->keymap.map)/sizeof(priv->keymap.map[0])) return 0; priv->keymap.map[j] = keysym; if (j + 1 > priv->keymap.size) priv->keymap.size = j + 1; return j; |