diff options
author | Audun-Marius Gangstø | 2020-11-21 12:26:39 +0100 |
---|---|---|
committer | Denys Vlasenko | 2020-11-21 17:34:42 +0100 |
commit | 9bf4499dd7c72db7636555ec386804540a3266fe (patch) | |
tree | 824c61d73006a355f0669434cc02ec2028ce79f5 | |
parent | 4323ac861ee5bb46051fada403971576356c928c (diff) | |
download | busybox-9bf4499dd7c72db7636555ec386804540a3266fe.zip busybox-9bf4499dd7c72db7636555ec386804540a3266fe.tar.gz |
lineedit: fix unicode characters in prompt
function old new delta
parse_and_put_prompt 779 823 +44
Signed-off-by: Audun-Marius Gangstø <audun@gangsto.org>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | libbb/lineedit.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/libbb/lineedit.c b/libbb/lineedit.c index e40a720..a3b798e 100644 --- a/libbb/lineedit.c +++ b/libbb/lineedit.c @@ -2029,10 +2029,17 @@ static void parse_and_put_prompt(const char *prmt_ptr) if (c == '\n') cmdedit_prmt_len = 0; else if (flg_not_length != ']') { -#if 0 /*ENABLE_UNICODE_SUPPORT*/ -/* Won't work, pbuf is one BYTE string here instead of an one Unicode char string. */ -/* FIXME */ - cmdedit_prmt_len += unicode_strwidth(pbuf); +#if ENABLE_UNICODE_SUPPORT + if (n == 1) { + /* Only count single-byte characters and the first of multi-byte characters */ + if ((unsigned char)*pbuf < 0x80 /* single byte character */ + || (unsigned char)*pbuf >= 0xc0 /* first of multi-byte characters */ + ) { + cmdedit_prmt_len += n; + } + } else { + cmdedit_prmt_len += unicode_strwidth(pbuf); + } #else cmdedit_prmt_len += n; #endif |