X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gui.c;h=45b477fb19b8bddaa43918b2d86676584c12b864;hp=b37f8fbd5d6db608b9c3086f508809aa52500737;hb=e8089cd5efad59a5eec689117acf563a38b8c6c7;hpb=b9c2428555a2a6edb038234a33e5072dc8c5ba7a diff --git a/gui.c b/gui.c index b37f8fbd..45b477fb 100644 --- a/gui.c +++ b/gui.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1998-2009 Andre Noll + * Copyright (C) 1998-2010 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -309,7 +309,7 @@ static int align_str(WINDOW* win, char *str, unsigned int len, num = 0; } /* replace newlines by spaces */ - for (i = 0; i < len; i++) { + for (i = 0; i < len && str[i]; i++) { if (str[i] == '\n') str[i] = ' '; } @@ -1348,31 +1348,29 @@ static void handle_command(int c) /* first check user's key bindings */ for (i = 0; i < conf.key_map_given; ++i) { - char tmp[MAXLINE], *handler, *arg; + char *tmp, *handler, *arg; - strcpy(tmp, conf.key_map_arg[i]); - if (!split_key_map(tmp, &handler, &arg)) + tmp = para_strdup(conf.key_map_arg[i]); + if (!split_key_map(tmp, &handler, &arg)) { + free(tmp); return; - if (!strcmp(tmp, km_keyname(c))) { - if (*handler == 'd') { - display_cmd(arg); - return; - } - if (*handler == 'x') { - external_cmd(arg); - return; - } - if (*handler == 'p') { - client_cmd_cmdline(arg); - return; - } - if (*handler == 'i') { - int num = find_cmd_byname(arg); - if (num >= 0) - command_list[num].handler(); - return; - } } + if (strcmp(tmp, km_keyname(c))) { + free(tmp); + continue; + } + if (*handler == 'd') + display_cmd(arg); + else if (*handler == 'x') + external_cmd(arg); + else if (*handler == 'p') + client_cmd_cmdline(arg); + else if (*handler == 'i') { + int num = find_cmd_byname(arg); + if (num >= 0) + command_list[num].handler(); + } + free(tmp); } /* not found, check internal key bindings */ for (i = 0; command_list[i].handler; i++) {