From: Denys Vlasenko Date: Thu, 16 Jul 2009 12:14:34 +0000 (+0200) Subject: fix a thinko in lineedit completion code X-Git-Tag: 1_15_0~71 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=5c2e81bb67750fa36e7901182e979cfdf8f5cc41;p=oweals%2Fbusybox.git fix a thinko in lineedit completion code Signed-off-by: Denys Vlasenko --- diff --git a/include/libbb.h b/include/libbb.h index 422670f19..50b884188 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -1246,8 +1246,9 @@ enum { FOR_SHELL = DO_HISTORY | SAVE_HISTORY | TAB_COMPLETION | USERNAME_COMPLETION, }; line_input_t *new_line_input_t(int flags) FAST_FUNC; -/* so far static: void free_line_input_t(line_input_t *n) FAST_FUNC; */ -/* Returns: +/* So far static: void free_line_input_t(line_input_t *n) FAST_FUNC; */ +/* maxsize must be >= 2. + * Returns: * -1 on read errors or EOF, or on bare Ctrl-D, * 0 on ctrl-C (the line entered is still returned in 'command'), * >0 length of input string, including terminating '\n' diff --git a/libbb/lineedit.c b/libbb/lineedit.c index cb675f230..a3d939551 100644 --- a/libbb/lineedit.c +++ b/libbb/lineedit.c @@ -692,13 +692,12 @@ static void exe_n_cwd_tab_completion(char *command, int type) #define int_buf (S.find_match__int_buf) #define pos_buf (S.find_match__pos_buf) - +/* is must be <= in */ static void collapse_pos(int is, int in) { - memmove(int_buf+is, int_buf+in, (MAX_LINELEN+1 - is - in) * sizeof(int_buf[0])); - memmove(pos_buf+is, pos_buf+in, (MAX_LINELEN+1 - is - in) * sizeof(pos_buf[0])); + memmove(int_buf+is, int_buf+in, (MAX_LINELEN+1-in)*sizeof(int_buf[0])); + memmove(pos_buf+is, pos_buf+in, (MAX_LINELEN+1-in)*sizeof(pos_buf[0])); } - static NOINLINE int find_match(char *matchBuf, int *len_with_quotes) { int i, j; @@ -866,9 +865,9 @@ static NOINLINE int find_match(char *matchBuf, int *len_with_quotes) *len_with_quotes = j ? j - pos_buf[0] : 0; return command_mode; +} #undef int_buf #undef pos_buf -} /* * display by column (original idea from ls applet, @@ -917,7 +916,7 @@ static char *add_quote_for_spec_chars(char *found) char *s = xzalloc((strlen(found) + 1) * 2); while (*found) { - if (strchr(" `\"#$%^&*()=+{}[]:;\'|\\<>", *found)) + if (strchr(" `\"#$%^&*()=+{}[]:;'|\\<>", *found)) s[l++] = '\\'; s[l++] = *found++; } @@ -1642,7 +1641,8 @@ static int lineedit_read_key(char *read_key_buffer) #undef CTRL #define CTRL(a) ((a) & ~0x40) -/* Returns: +/* maxsize must be >= 2. + * Returns: * -1 on read errors or EOF, or on bare Ctrl-D, * 0 on ctrl-C (the line entered is still returned in 'command'), * >0 length of input string, including terminating '\n'