From 9fb30cf572f7c5ff26e883396a5020da89d9541a Mon Sep 17 00:00:00 2001
From: Peter Stephenson
Date: Mon, 7 Dec 2015 18:54:03 +0000
Subject: [PATCH] 37331: Use a single chracter to represent an MB_INCOMPLETE.
This is as it is likely to appear as a single character in output
even if it has multiple octets.
---
ChangeLog | 5 +++++
Src/utils.c | 16 ++++++++++------
2 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index f5b0f2ae2..55a917068 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-12-07 Peter Stephenson
+
+ * 37331: Src/utils.c: use a single character to represent an
+ MB_INCOMPLETE string even if multiple octets.
+
2015-12-07 Peter Stephenson
* 37337: Src/Zle/zle.h, Src/Zle/zle_main.c,
diff --git a/Src/utils.c b/Src/utils.c
index 45f8286df..fc2b1920e 100644
--- a/Src/utils.c
+++ b/Src/utils.c
@@ -5180,11 +5180,15 @@ mb_metastrlenend(char *ptr, int width, char *eptr)
if (ret == MB_INCOMPLETE) {
/*
- * "num_in_char" is only used for incomplete characters. The
- * assumption is that we will output this ocatet as a single
+ * "num_in_char" is only used for incomplete characters.
+ * The assumption is that we will output all trailing octets
+ * that form part of an incomplete character as a single
* character (of single width) if we don't get a complete
- * character; if we do get a complete character, num_in_char
- * becomes irrelevant and is set to zero.
+ * character. This is purely pragmatic --- I'm not aware
+ * of a standard way of dealing with incomplete characters.
+ *
+ * If we do get a complete character, num_in_char
+ * becomes irrelevant and is set to zero
*
* This is in contrast to "num" which counts the characters
* or widths in complete characters. The two are summed,
@@ -5216,8 +5220,8 @@ mb_metastrlenend(char *ptr, int width, char *eptr)
}
}
- /* If incomplete, treat remainder as trailing single bytes */
- return num + num_in_char;
+ /* If incomplete, treat remainder as trailing single character */
+ return num + (num_in_char ? 1 : 0);
}
/*