summaryrefslogtreecommitdiff
path: root/Src/Zle/complete.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2008-11-15 21:27:45 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2008-11-15 21:27:45 +0000
commit85c513894d42293c79b46f09a039162329698656 (patch)
treee4cb108ebd22c4e7420cb6baf9cf9f59018c29c8 /Src/Zle/complete.c
parentac38534728b2980d1e4b3422453322546b975062 (diff)
downloadzsh-85c513894d42293c79b46f09a039162329698656.tar.gz
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.c16
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;
}