From f9bb47d9affce13bd7d60dac86353b2304d889da Mon Sep 17 00:00:00 2001 From: "Tony J. White =" Date: Thu, 22 Mar 2007 22:03:00 +0000 Subject: [PATCH] * (bug 2741) replace K_LAST_KEY with MAX_KEYS. K_LAST_KEY is now defined at 256 for mod compatability reasons. ioq3-only mods may chose to use MAX_KEYS for checking binds in order to get full key support, but at the cost of breaking compatability with older clients. * (bug 2741) remove some lingering 256-key hardcoding * properly check bounds of keynum in Key_IsDown(), Key_SetBinding(), and Key_GetBinding() --- code/client/cl_keys.c | 10 +++++----- code/client/keycodes.h | 6 +++++- code/client/keys.h | 2 -- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/code/client/cl_keys.c b/code/client/cl_keys.c index acfe951e..a5188072 100644 --- a/code/client/cl_keys.c +++ b/code/client/cl_keys.c @@ -782,7 +782,7 @@ Key_IsDown =================== */ qboolean Key_IsDown( int keynum ) { - if ( keynum == -1 ) { + if ( keynum < 0 || keynum >= MAX_KEYS ) { return qfalse; } @@ -902,7 +902,7 @@ Key_SetBinding =================== */ void Key_SetBinding( int keynum, const char *binding ) { - if ( keynum == -1 ) { + if ( keynum < 0 || keynum >= MAX_KEYS ) { return; } @@ -926,7 +926,7 @@ Key_GetBinding =================== */ char *Key_GetBinding( int keynum ) { - if ( keynum == -1 ) { + if ( keynum < 0 || keynum >= MAX_KEYS ) { return ""; } @@ -943,7 +943,7 @@ int Key_GetKey(const char *binding) { int i; if (binding) { - for (i=0 ; i<256 ; i++) { + for (i=0 ; i < MAX_KEYS ; i++) { if (keys[i].binding && Q_stricmp(binding, keys[i].binding) == 0) { return i; } @@ -986,7 +986,7 @@ void Key_Unbindall_f (void) { int i; - for (i=0 ; i<256 ; i++) + for (i=0 ; i < MAX_KEYS; i++) if (keys[i].binding) Key_SetBinding (i, ""); } diff --git a/code/client/keycodes.h b/code/client/keycodes.h index 3e61ffa1..c6e6412a 100644 --- a/code/client/keycodes.h +++ b/code/client/keycodes.h @@ -260,9 +260,13 @@ typedef enum { K_EURO, K_UNDO, - K_LAST_KEY // this had better be < MAX_KEYS! + MAX_KEYS } keyNum_t; +// MAX_KEYS replaces K_LAST_KEY, however some mods may have used K_LAST_KEY +// in detecting binds, so we leave it defined to the old hardcoded value +// of maxiumum keys to prevent mods from crashing older versions of the engine +#define K_LAST_KEY 256 // The menu code needs to get both key and char events, but // to avoid duplicating the paths, the char events are just diff --git a/code/client/keys.h b/code/client/keys.h index 00fc9db6..851d367b 100644 --- a/code/client/keys.h +++ b/code/client/keys.h @@ -21,8 +21,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "keycodes.h" -#define MAX_KEYS 384 - typedef struct { qboolean down; int repeats; // if > 1, it is autorepeating