diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2006-08-03 15:37:49 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2006-08-03 15:37:49 +0000 |
commit | 48d6402e65f87427d83a516e5296d677735f0022 (patch) | |
tree | 8879ee181827627d65ac60f3f822f5294c845778 /Src/Zle/zle_utils.c | |
parent | 07f11ba6bf609797f42c1ac768184b359a4e6ad7 (diff) | |
download | zsh-48d6402e65f87427d83a516e5296d677735f0022.tar.gz zsh-48d6402e65f87427d83a516e5296d677735f0022.tar.xz zsh-48d6402e65f87427d83a516e5296d677735f0022.zip |
rationalise mb<->wc conversions to use restartable form
Diffstat (limited to 'Src/Zle/zle_utils.c')
-rw-r--r-- | Src/Zle/zle_utils.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/Src/Zle/zle_utils.c b/Src/Zle/zle_utils.c index cce162fa0..6275e74d3 100644 --- a/Src/Zle/zle_utils.c +++ b/Src/Zle/zle_utils.c @@ -135,17 +135,20 @@ zlelineasstring(ZLE_STRING_T instr, int inll, int incs, int *outllp, char *s; int i, j; size_t mb_len = 0; + mbstate_t mbs; s = zalloc(inll * MB_CUR_MAX + 1); outcs = 0; + memset(&mbs, 0, sizeof(mbs)); for (i=0; i < inll; i++, incs--) { if (incs == 0) outcs = mb_len; - j = wctomb(s + mb_len, instr[i]); + j = wcrtomb(s + mb_len, instr[i], &mbs); if (j == -1) { /* invalid char; what to do? */ s[mb_len++] = ZWC('?'); + memset(&mbs, 0, sizeof(mbs)); } else { mb_len += j; } @@ -780,6 +783,7 @@ showmsg(char const *msg) p = unmetafy(umsg, &ulen); memset(&mbs, 0, sizeof mbs); + mb_metacharinit(); while (ulen > 0) { char const *n; if (*p == '\n') { |