diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2005-02-22 13:12:35 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2005-02-22 13:12:35 +0000 |
commit | b83f0e229097626fa8e667486c48d7a3139d2e4a (patch) | |
tree | dd125c9521986e7a40e4d13a67db90757aee9ad5 /Src/Zle/zle_utils.c | |
parent | c8883a5a08e6a9c0fbb088acab11c1ef8788b3d8 (diff) | |
download | zsh-b83f0e229097626fa8e667486c48d7a3139d2e4a.tar.gz zsh-b83f0e229097626fa8e667486c48d7a3139d2e4a.tar.xz zsh-b83f0e229097626fa8e667486c48d7a3139d2e4a.zip |
Andrej: 20838: get ZLE_UNICODE_SUPPORT basically working
Diffstat (limited to 'Src/Zle/zle_utils.c')
-rw-r--r-- | Src/Zle/zle_utils.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/Src/Zle/zle_utils.c b/Src/Zle/zle_utils.c index e6f696935..a5fe799eb 100644 --- a/Src/Zle/zle_utils.c +++ b/Src/Zle/zle_utils.c @@ -111,22 +111,22 @@ zlelineasstring(ZLE_STRING_T instr, int inll, int incs, int *outll, { #ifdef ZLE_UNICODE_SUPPORT char *s; - char *mb_cursor; int i, j; size_t mb_len = 0; - mb_cursor = s = zalloc(inll * MB_CUR_MAX); + s = zalloc(inll * MB_CUR_MAX + 1); - for(i=0;i<=inll;i++) { + for(i=0; i < inll; i++) { if (outcs != NULL && i == incs) *outcs = mb_len; - j = wctomb(mb_cursor, instr[i]); + j = wctomb(s + mb_len, instr[i]); if (j == -1) { /* invalid char; what to do? */ } else { mb_len += j; } } + s[mb_len] = '\0'; if (outll != NULL) *outll = mb_len; @@ -135,7 +135,7 @@ zlelineasstring(ZLE_STRING_T instr, int inll, int incs, int *outll, unsigned char *ret = (unsigned char *) metafy((char *) s, mb_len, META_HEAPDUP); - zfree((char *)s, inll * MB_CUR_MAX); + zfree((char *)s, inll * MB_CUR_MAX + 1); return ret; } @@ -201,11 +201,12 @@ stringaszleline(unsigned char *instr, int *outll, int *outsz) #ifdef ZLE_UNICODE_SUPPORT if (ll) { /* reset shift state by converting null. */ - char cnull = '\0'; + /* char cnull = '\0'; */ char *inptr = (char *)instr; wchar_t *outptr = outstr; - mbrtowc(outstr, &cnull, 1, &ps); + /* mbrtowc(outstr, &cnull, 1, &ps); */ + memset(&ps, \0, sizeof(ps)); while (ll) { size_t ret = mbrtowc(outptr, inptr, ll, &ps); |