summaryrefslogtreecommitdiff
path: root/Src/Zle/complist.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Zle/complist.c')
-rw-r--r--Src/Zle/complist.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/Src/Zle/complist.c b/Src/Zle/complist.c
index 5afd78115..9e633e64f 100644
--- a/Src/Zle/complist.c
+++ b/Src/Zle/complist.c
@@ -572,14 +572,14 @@ clnicezputs(Listcols colors, char *s, int ml)
* umlen is the full length of the unmetafied string
* width is the full printing width of a prettified character,
* including both ASCII prettification and the wide character itself.
- * ps is the shift state of the conversion to wide characters.
+ * mbs is the shift state of the conversion to wide characters.
*/
char *ums, *uptr, *sptr, *wptr;
- int umleft, umlen;
+ int umleft, umlen, eol = 0;
size_t width;
- mbstate_t ps;
+ mbstate_t mbs;
- memset(&ps, 0, sizeof(ps));
+ memset(&mbs, 0, sizeof mbs);
ums = ztrdup(s);
untokenize(ums);
uptr = unmetafy(ums, &umlen);
@@ -589,11 +589,13 @@ clnicezputs(Listcols colors, char *s, int ml)
initiscol(colors);
while (umleft > 0) {
- size_t cnt = mbrtowc(&cc, uptr, umleft, &ps);
+ size_t cnt = eol ? MB_INVALID : mbrtowc(&cc, uptr, umleft, &mbs);
switch (cnt) {
- case (size_t)-2:
- case (size_t)-1:
+ case MB_INCOMPLETE:
+ eol = 1;
+ /* FALL THROUGH */
+ case MB_INVALID:
/* This handles byte values that aren't valid wide-character
* sequences. */
sptr = nicechar(STOUC(*uptr));
@@ -601,8 +603,8 @@ clnicezputs(Listcols colors, char *s, int ml)
width = strlen(sptr);
wptr = sptr + width;
cnt = 1;
- /* Get ps out of its undefined state. */
- memset(&ps, 0, sizeof ps);
+ /* Get mbs out of its undefined state. */
+ memset(&mbs, 0, sizeof mbs);
break;
case 0:
/* This handles a '\0' in the input (which is a real char