diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-07-16 14:14:34 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-07-16 14:14:34 +0200 |
commit | 5c2e81bb67750fa36e7901182e979cfdf8f5cc41 (patch) | |
tree | b139d5aadff406b770fe3fbda0649ef3b91b0591 | |
parent | 01ba1676afff4673a7dd5b355e970d52769723df (diff) | |
download | busybox-5c2e81bb67750fa36e7901182e979cfdf8f5cc41.tar.gz |
fix a thinko in lineedit completion code
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | include/libbb.h | 5 | ||||
-rw-r--r-- | libbb/lineedit.c | 14 |
2 files changed, 10 insertions, 9 deletions
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' |