aboutsummaryrefslogtreecommitdiff
path: root/contrib/tcsh/sh.glob.c
diff options
context:
space:
mode:
authorDavid E. O'Brien <obrien@FreeBSD.org>2000-04-20 04:22:36 +0000
committerDavid E. O'Brien <obrien@FreeBSD.org>2000-04-20 04:22:36 +0000
commit8e66bd9ec80d49c2379efad7367474d2d4a4994a (patch)
treeb621d4cee9510d59a22e8ba84f80bd04ed79bd74 /contrib/tcsh/sh.glob.c
parentc80476e4c3e6730697b9424f88dfa74d1907cabd (diff)
downloadsrc-8e66bd9ec80d49c2379efad7367474d2d4a4994a.tar.gz
src-8e66bd9ec80d49c2379efad7367474d2d4a4994a.zip
6.09.01 vendor update.vendor/tcsh/6.09.01
Notes
Notes: svn path=/vendor/tcsh/dist/; revision=59415 svn path=/vendor/tcsh/6.09.01/; revision=59417; tag=vendor/tcsh/6.09.01
Diffstat (limited to 'contrib/tcsh/sh.glob.c')
-rw-r--r--contrib/tcsh/sh.glob.c38
1 files changed, 36 insertions, 2 deletions
diff --git a/contrib/tcsh/sh.glob.c b/contrib/tcsh/sh.glob.c
index 20faaeecf36c..9bcd9790a335 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);