1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-09-29 03:17:53 -04:00

Add KEYMAP_INVALID value for enum keymap_id and properly check for it

get_keymap_id returns -1 when it can't find the keymap.  Because the return
type of get_keymap_id is enum keymap_id and enum keymap_id did not have any
explicit values defined, it could be unsigned, which meant that when
get_keymap_id returned -1, it was really returning a huge positive number.
This meant that when callers checker whether the return value was negative,
they were essentially performing no check at all, so they might give
get_keymap_id an invalid keymap name, get back an invalid keymap_id, and
use that invalid keymap_id.

This commit adds KEYMAP_INVALID = -1 to enum keymap_id and makes all
functions that deal with the enumeration use that symbol.
This commit is contained in:
Miciah Dashiel Butler Masters 2008-01-27 18:47:20 +00:00
parent 3a0286e447
commit ad5b6e0a87
2 changed files with 4 additions and 3 deletions

View File

@ -584,7 +584,7 @@ bind_key_to_event(unsigned char *ckmap, const unsigned char *ckey, int event)
action_id_T action_id;
enum keymap_id keymap_id = get_keymap_id(ckmap);
if (keymap_id < 0)
if (keymap_id == KEYMAP_INVALID)
return gettext("Unrecognised keymap");
if (parse_keystroke(ckey, &kbd) < 0)
@ -907,7 +907,7 @@ bind_do(unsigned char *keymap_str, const unsigned char *keystroke_str,
struct keybinding *keybinding;
keymap_id = get_keymap_id(keymap_str);
if (keymap_id < 0) return 1;
if (keymap_id == KEYMAP_INVALID) return 1;
if (parse_keystroke(keystroke_str, &kbd) < 0) return 2;
@ -929,7 +929,7 @@ bind_act(unsigned char *keymap_str, const unsigned char *keystroke_str)
struct keybinding *keybinding;
keymap_id = get_keymap_id(keymap_str);
if (keymap_id < 0)
if (keymap_id == KEYMAP_INVALID)
return NULL;
keybinding = kbd_stroke_lookup(keymap_id, keystroke_str);

View File

@ -14,6 +14,7 @@ struct module;
typedef long action_id_T;
enum keymap_id {
KEYMAP_INVALID = -1,
KEYMAP_MAIN,
KEYMAP_EDIT,
KEYMAP_MENU,