diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2008-11-15 21:27:45 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2008-11-15 21:27:45 +0000 |
commit | 85c513894d42293c79b46f09a039162329698656 (patch) | |
tree | e4cb108ebd22c4e7420cb6baf9cf9f59018c29c8 /Src/Zle/complete.c | |
parent | ac38534728b2980d1e4b3422453322546b975062 (diff) | |
download | zsh-85c513894d42293c79b46f09a039162329698656.tar.gz zsh-85c513894d42293c79b46f09a039162329698656.tar.xz zsh-85c513894d42293c79b46f09a039162329698656.zip |
26047: convert lower levels of completion matching to use
multibyte strings and wide characters
Diffstat (limited to 'Src/Zle/complete.c')
-rw-r--r-- | Src/Zle/complete.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/Src/Zle/complete.c b/Src/Zle/complete.c index bc56bc05a..6398fd3e7 100644 --- a/Src/Zle/complete.c +++ b/Src/Zle/complete.c @@ -381,11 +381,12 @@ parse_pattern(char *name, char **sp, int *lp, char e, int *err) { Cpattern ret = NULL, r = NULL, n; char *s = *sp; - int inchar; - int l = 0; + convchar_t inchar; + int l = 0, inlen; *err = 0; + MB_METACHARINIT(); while (*s && (e ? (*s != e) : !inblank(*s))) { n = (Cpattern) hcalloc(sizeof(*n)); n->next = NULL; @@ -409,11 +410,12 @@ parse_pattern(char *name, char **sp, int *lp, char e, int *err) if (*s == '\\' && s[1]) s++; - if (*s == Meta) - inchar = STOUC(*++s) ^ 32; - else - inchar = STOUC(*s); - s++; + inlen = MB_METACHARLENCONV(s, &inchar); +#ifdef MULTIBYTE_SUPPORT + if (inchar == WEOF) + inchar = (convchar_t)(*s == Meta ? s[1] ^ 32 : *s); +#endif + s += inlen; n->tp = CPAT_CHAR; n->u.chr = inchar; } |