diff options
author | Andy Fiddaman <omnios@citrus-it.co.uk> | 2020-12-27 17:47:37 +0000 |
---|---|---|
committer | Andy Fiddaman <omnios@citrus-it.co.uk> | 2021-01-30 17:13:33 +0000 |
commit | b30d193948be5a7794d7ae3ba0ed9c2f72c88e0f (patch) | |
tree | 6a37e590faffb9bb9af66887de645c546445036c /usr/src/lib/libast/common/string/fmtmatch.c | |
parent | df36e06d12cbf655ddf22339ef8c39fa2b83ebf8 (diff) | |
download | illumos-joyent-b30d193948be5a7794d7ae3ba0ed9c2f72c88e0f.tar.gz |
13405 ksh93 update to 2012-08-01
13434 sh: mishandles backslash as last character of a block of input
11750 ksh mkdir builtin doesn't honor special file permissions
9199 ksh93 builtin *grep -v mishandles blank lines, blows up libgcrypt-config
6756 sh (and ksh) have issues with ${1+"$@"}
6520 ksh: sleep could wait forever
4860 ksh93: core in printf
3791 /bin/sh's builtin 'rm' busted: 'rm -f' without arguments returns error
1047 ksh overwrites child core files
880 ksh93 coredumps on 'unset'
499 "interrupted system call" when using "tee" builtin in ksh
Reviewed by: Robert Mustacchi <rm@fingolfin.org>
Reviewed by: Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
Reviewed by: Dominik Hassler <hadfl@omnios.org>
Approved by: Rich Lowe <richlowe@richlowe.net>
Diffstat (limited to 'usr/src/lib/libast/common/string/fmtmatch.c')
-rw-r--r-- | usr/src/lib/libast/common/string/fmtmatch.c | 286 |
1 files changed, 0 insertions, 286 deletions
diff --git a/usr/src/lib/libast/common/string/fmtmatch.c b/usr/src/lib/libast/common/string/fmtmatch.c deleted file mode 100644 index 6bb08731dd..0000000000 --- a/usr/src/lib/libast/common/string/fmtmatch.c +++ /dev/null @@ -1,286 +0,0 @@ -/*********************************************************************** -* * -* This software is part of the ast package * -* Copyright (c) 1985-2010 AT&T Intellectual Property * -* and is licensed under the * -* Common Public License, Version 1.0 * -* by AT&T Intellectual Property * -* * -* A copy of the License is available at * -* http://www.opensource.org/licenses/cpl1.0.txt * -* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * -* * -* Information and Software Systems Research * -* AT&T Research * -* Florham Park NJ * -* * -* Glenn Fowler <gsf@research.att.com> * -* David Korn <dgk@research.att.com> * -* Phong Vo <kpv@research.att.com> * -* * -***********************************************************************/ -#pragma prototyped -/* - * Glenn Fowler - * AT&T Research - * - * return strmatch() expression given REG_AUGMENTED RE - * 0 returned for invalid RE - */ - -#include <ast.h> - -char* -fmtmatch(const char* as) -{ - register char* s = (char*)as; - register int c; - register char* t; - register char** p; - register char* b; - char* x; - char* y; - char* z; - int a; - int e; - int n; - char* buf; - char* stack[32]; - - c = 3 * (strlen(s) + 1); - buf = fmtbuf(c); - t = b = buf + 3; - p = stack; - if (a = *s == '^') - s++; - e = 0; - for (;;) - { - switch (c = *s++) - { - case 0: - break; - case '\\': - if (!(c = *s++)) - return 0; - switch (*s) - { - case '*': - case '+': - case '?': - *t++ = *s++; - *t++ = '('; - *t++ = '\\'; - *t++ = c; - c = ')'; - break; - case '|': - case '&': - if (c == '(') - { - *t++ = c; - c = *s++; - goto logical; - } - break; - case '{': - case '}': - break; - default: - *t++ = '\\'; - break; - } - *t++ = c; - continue; - case '[': - x = t; - *t++ = c; - if ((c = *s++) == '^') - { - *t++ = '!'; - c = *s++; - } - else if (c == '!') - { - *t++ = '\\'; - *t++ = c; - c = *s++; - } - for (;;) - { - if (!(*t++ = c)) - return 0; - if (c == '\\') - *t++ = c; - if ((c = *s++) == ']') - { - *t++ = c; - break; - } - } - switch (*s) - { - case '*': - case '+': - case '?': - for (y = t + 2, t--; t >= x; t--) - *(t + 2) = *t; - *++t = *s++; - *++t = '('; - t = y; - *t++ = ')'; - break; - } - continue; - case '(': - if (p >= &stack[elementsof(stack)]) - return 0; - *p++ = t; - if (*s == '?') - { - s++; - if (*s == 'K' && *(s + 1) == ')') - { - s += 2; - p--; - while (*t = *s) - t++, s++; - continue; - } - *t++ = '~'; - } - else - *t++ = '@'; - *t++ = '('; - continue; - case ')': - if (p == stack) - return 0; - p--; - *t++ = c; - switch (*s) - { - case 0: - break; - case '*': - case '+': - case '?': - case '!': - **p = *s++; - if (*s == '?') - { - s++; - x = *p + 1; - for (y = ++t; y > x; y--) - *y = *(y - 1); - *x = '-'; - } - continue; - case '{': - for (z = s; *z != '}'; z++) - if (!*z) - return 0; - n = z - s; - if (*++z == '?') - n++; - x = *p + n; - for (y = t += n; y > x; y--) - *y = *(y - n); - for (x = *p; s < z; *x++ = *s++); - if (*s == '?') - { - s++; - *x++ = '-'; - } - continue; - default: - continue; - } - break; - case '.': - switch (*s) - { - case 0: - *t++ = '?'; - break; - case '*': - s++; - *t++ = '*'; - e = !*s; - continue; - case '+': - s++; - *t++ = '?'; - *t++ = '*'; - continue; - case '?': - s++; - *t++ = '?'; - *t++ = '('; - *t++ = '?'; - *t++ = ')'; - continue; - default: - *t++ = '?'; - continue; - } - break; - case '*': - case '+': - case '?': - case '{': - n = *(t - 1); - if (t == b || n == '(' || n == '|') - return 0; - *(t - 1) = c; - if (c == '{') - { - for (z = s; *z != '}'; z++) - if (!*z) - return 0; - for (; s <= z; *t++ = *s++); - } - if (*s == '?') - { - s++; - *t++ = '-'; - } - *t++ = '('; - *t++ = n; - *t++ = ')'; - continue; - case '|': - case '&': - if (t == b || *(t - 1) == '(') - return 0; - logical: - if (!*s || *s == ')') - return 0; - if (p == stack && b == buf + 3) - { - *--b = '('; - *--b = '@'; - } - *t++ = c; - continue; - case '$': - if (e = !*s) - break; - /*FALLTHROUGH*/ - default: - *t++ = c; - continue; - } - break; - } - if (p != stack) - return 0; - if (b != buf + 3) - *t++ = ')'; - if (!a && (*b != '*' || *(b + 1) == '(' || (*(b + 1) == '-' || *(b + 1) == '~') && *(b + 2) == '(')) - *--b = '*'; - if (!e) - *t++ = '*'; - *t = 0; - return b; -} |