summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAudun-Marius Gangstø2020-11-21 12:26:39 +0100
committerDenys Vlasenko2020-11-21 17:34:42 +0100
commit9bf4499dd7c72db7636555ec386804540a3266fe (patch)
tree824c61d73006a355f0669434cc02ec2028ce79f5
parent4323ac861ee5bb46051fada403971576356c928c (diff)
downloadbusybox-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.c15
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