diff options
Diffstat (limited to 'libbb/lineedit.c')
-rw-r--r-- | libbb/lineedit.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/libbb/lineedit.c b/libbb/lineedit.c index de7042491..381203a22 100644 --- a/libbb/lineedit.c +++ b/libbb/lineedit.c | |||
@@ -1061,9 +1061,16 @@ static void input_tab(smallint *lastWasTab) | |||
1061 | 1061 | ||
1062 | /* Make a local copy of the string -- | 1062 | /* Make a local copy of the string -- |
1063 | * up to the position of the cursor */ | 1063 | * up to the position of the cursor */ |
1064 | #if !ENABLE_UNICODE_SUPPORT | ||
1064 | save_string(matchBuf, cursor + 1); | 1065 | save_string(matchBuf, cursor + 1); |
1065 | #if ENABLE_UNICODE_SUPPORT | 1066 | #else |
1066 | cursor_mb = strlen(matchBuf); | 1067 | { |
1068 | CHAR_T wc = command_ps[cursor]; | ||
1069 | command_ps[cursor] = 0; | ||
1070 | save_string(matchBuf, MAX_LINELEN); | ||
1071 | command_ps[cursor] = wc; | ||
1072 | cursor_mb = strlen(matchBuf); | ||
1073 | } | ||
1067 | #endif | 1074 | #endif |
1068 | tmp = matchBuf; | 1075 | tmp = matchBuf; |
1069 | 1076 | ||
@@ -1167,7 +1174,10 @@ static void input_tab(smallint *lastWasTab) | |||
1167 | sprintf(&command[cursor_mb - recalc_pos], "%s%s", tmp, matchBuf); | 1174 | sprintf(&command[cursor_mb - recalc_pos], "%s%s", tmp, matchBuf); |
1168 | command_len = load_string(command, S.maxsize); | 1175 | command_len = load_string(command, S.maxsize); |
1169 | /* write out the matched command */ | 1176 | /* write out the matched command */ |
1170 | redraw(cmdedit_y, command_len - len); | 1177 | /* paranoia: load_string can return 0 on conv error, |
1178 | * prevent passing len = (0 - 12) to redraw */ | ||
1179 | len = command_len - len; | ||
1180 | redraw(cmdedit_y, len >= 0 ? len : 0); | ||
1171 | } | 1181 | } |
1172 | } | 1182 | } |
1173 | #endif | 1183 | #endif |