diff options
author | obrien <obrien@FreeBSD.org> | 2000-04-20 04:22:36 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 2000-04-20 04:22:36 +0000 |
commit | efebb8d2fa02976f24760fdc8c7444d9cbfc1ca3 (patch) | |
tree | b621d4cee9510d59a22e8ba84f80bd04ed79bd74 /contrib/tcsh/sh.glob.c | |
parent | 4ad28cefef28ce6bdb44a0532cfe20a2076bc694 (diff) | |
download | FreeBSD-src-efebb8d2fa02976f24760fdc8c7444d9cbfc1ca3.zip FreeBSD-src-efebb8d2fa02976f24760fdc8c7444d9cbfc1ca3.tar.gz |
6.09.01 vendor update.
Diffstat (limited to 'contrib/tcsh/sh.glob.c')
-rw-r--r-- | contrib/tcsh/sh.glob.c | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/contrib/tcsh/sh.glob.c b/contrib/tcsh/sh.glob.c index 20faaee..9bcd979 100644 --- a/contrib/tcsh/sh.glob.c +++ b/contrib/tcsh/sh.glob.c @@ -1,4 +1,4 @@ -/* $Header: /src/pub/tcsh/sh.glob.c,v 3.43 1998/10/25 15:10:14 christos Exp $ */ +/* $Header: /src/pub/tcsh/sh.glob.c,v 3.44 2000/01/14 22:57:28 christos Exp $ */ /* * sh.glob.c: Regular expression expansion */ @@ -36,7 +36,7 @@ */ #include "sh.h" -RCSID("$Id: sh.glob.c,v 3.43 1998/10/25 15:10:14 christos Exp $") +RCSID("$Id: sh.glob.c,v 3.44 2000/01/14 22:57:28 christos Exp $") #include "tc.h" @@ -190,9 +190,19 @@ globbrace(s, p, bl) /* check for balanced braces */ for (i = 0, pe = ++p; *pe; pe++) +#ifdef DSPMBYTE + if (Ismbyte1(*pe) && *(pe + 1) != EOS) + pe ++; + else +#endif /* DSPMBYTE */ if (*pe == LBRK) { /* Ignore everything between [] */ for (++pe; *pe != RBRK && *pe != EOS; pe++) +#ifdef DSPMBYTE + if (Ismbyte1(*pe) && *(pe + 1) != EOS) + pe ++; + else +#endif /* DSPMBYTE */ continue; if (*pe == EOS) { blkfree(nv); @@ -213,9 +223,19 @@ globbrace(s, p, bl) } for (i = 0, pl = pm = p; pm <= pe; pm++) +#ifdef DSPMBYTE + if (Ismbyte1(*pm) && pm + 1 <= pe) + pm ++; + else +#endif /* DSPMBYTE */ switch (*pm) { case LBRK: for (++pm; *pm != RBRK && *pm != EOS; pm++) +#ifdef DSPMBYTE + if (Ismbyte1(*pm) && *(pm + 1) != EOS) + pm ++; + else +#endif /* DSPMBYTE */ continue; if (*pm == EOS) { *vl = NULL; @@ -287,6 +307,12 @@ expbrace(nvp, elp, size) Char **bl; int len; +#if defined (DSPMBYTE) + if (b != s && Ismbyte2(*b) && Ismbyte1(*(b-1))) { + /* The "{" is the 2nd byte of a MB character */ + continue; + } +#endif /* DSPMBYTE */ if ((len = globbrace(s, b, &bl)) < 0) { xfree((ptr_t) nv); stderror(ERR_MISSING, -len); @@ -727,7 +753,15 @@ dobackp(cp, literal) pargc = 0; pnleft = LONGBSIZE - 4; for (;;) { +#if defined(DSPMBYTE) + for (lp = cp;; lp++) { + if (*lp == '`' && + (lp-1 < cp || !Ismbyte2(*lp) || !Ismbyte1(*(lp-1)))) { + break; + } +#else /* DSPMBYTE */ for (lp = cp; *lp != '`'; lp++) { +#endif /* DSPMBYTE */ if (*lp == 0) { if (pargcp != pargs) pword(LONGBSIZE); |