lineedit: fix completion with Unicode chars
No binary (build failed)
—
(log yok)
| @@ -1061,9 +1061,16 @@ static void input_tab(smallint *lastWasTab) | |
| /* Make a local copy of the string -- | |
| * up to the position of the cursor */ | |
| + | #if !ENABLE_UNICODE_SUPPORT |
| save_string(matchBuf, cursor + 1); | |
| - | #if ENABLE_UNICODE_SUPPORT |
| - | cursor_mb = strlen(matchBuf); |
| + | #else |
| + | { |
| + | CHAR_T wc = command_ps[cursor]; |
| + | command_ps[cursor] = 0; |
| + | save_string(matchBuf, MAX_LINELEN); |
| + | command_ps[cursor] = wc; |
| + | cursor_mb = strlen(matchBuf); |
| + | } |
| #endif | |
| tmp = matchBuf; | |
| @@ -1167,7 +1174,10 @@ static void input_tab(smallint *lastWasTab) | |
| sprintf(&command[cursor_mb - recalc_pos], "%s%s", tmp, matchBuf); | |
| command_len = load_string(command, S.maxsize); | |
| /* write out the matched command */ | |
| - | redraw(cmdedit_y, command_len - len); |
| + | /* paranoia: load_string can return 0 on conv error, |
| + | * prevent passing len = (0 - 12) to redraw */ |
| + | len = command_len - len; |
| + | redraw(cmdedit_y, len >= 0 ? len : 0); |
| } | |
| } | |
| #endif | |
| @@ -131,7 +131,7 @@ size_t FAST_FUNC wcstombs(char *dest, const wchar_t *src, size_t n) | |
| size_t len = wcrtomb_internal(tbuf, wc); | |
| if (len > n) | |
| - | len = n; |
| + | break; |
| memcpy(dest, tbuf, len); | |
| if (wc == L'\0') | |
| return org_n - n; | |