summaryrefslogtreecommitdiff
path: root/usr/src/lib/libast/common/regex
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libast/common/regex')
-rw-r--r--usr/src/lib/libast/common/regex/regalloc.c2
-rw-r--r--usr/src/lib/libast/common/regex/regcache.c75
-rw-r--r--usr/src/lib/libast/common/regex/regclass.c2
-rw-r--r--usr/src/lib/libast/common/regex/regcoll.c2
-rw-r--r--usr/src/lib/libast/common/regex/regcomp.c81
-rw-r--r--usr/src/lib/libast/common/regex/regdecomp.c45
-rw-r--r--usr/src/lib/libast/common/regex/regerror.c6
-rw-r--r--usr/src/lib/libast/common/regex/regexec.c2
-rw-r--r--usr/src/lib/libast/common/regex/regfatal.c2
-rw-r--r--usr/src/lib/libast/common/regex/reginit.c2
-rw-r--r--usr/src/lib/libast/common/regex/reglib.h2
-rw-r--r--usr/src/lib/libast/common/regex/regnexec.c4
-rw-r--r--usr/src/lib/libast/common/regex/regrecord.c2
-rw-r--r--usr/src/lib/libast/common/regex/regrexec.c2
-rw-r--r--usr/src/lib/libast/common/regex/regstat.c2
-rw-r--r--usr/src/lib/libast/common/regex/regsub.c2
-rw-r--r--usr/src/lib/libast/common/regex/regsubcomp.c2
-rw-r--r--usr/src/lib/libast/common/regex/regsubexec.c2
-rw-r--r--usr/src/lib/libast/common/regex/ucs_names.h2
19 files changed, 125 insertions, 114 deletions
diff --git a/usr/src/lib/libast/common/regex/regalloc.c b/usr/src/lib/libast/common/regex/regalloc.c
index 710800ef60..8c90f5f7f3 100644
--- a/usr/src/lib/libast/common/regex/regalloc.c
+++ b/usr/src/lib/libast/common/regex/regalloc.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libast/common/regex/regcache.c b/usr/src/lib/libast/common/regex/regcache.c
index f40f31fc09..438f7e79e1 100644
--- a/usr/src/lib/libast/common/regex/regcache.c
+++ b/usr/src/lib/libast/common/regex/regcache.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -23,31 +23,25 @@
/*
* regcomp() regex_t cache
- * AT&T Research
+ * at&t research
*/
#include <ast.h>
#include <regex.h>
#define CACHE 8 /* default # cached re's */
-#define MAXPAT 256 /* max pattern length + 1 */
+#define ROUND 64 /* pattern buffer size round */
-#define KEEP 01
-#define DROP 02
-
-typedef union Pattern_u
-{
- unsigned long key;
- char buf[MAXPAT];
-} Pattern_t;
+typedef unsigned long Key_t;
typedef struct Cache_s
{
- Pattern_t pattern;
+ char* pattern;
regex_t re;
unsigned long serial;
regflags_t reflags;
- int flags;
+ int keep;
+ int size;
} Cache_t;
typedef struct State_s
@@ -70,9 +64,9 @@ flushcache(void)
register int i;
for (i = matchstate.size; i--;)
- if (matchstate.cache[i] && matchstate.cache[i]->flags)
+ if (matchstate.cache[i] && matchstate.cache[i]->keep)
{
- matchstate.cache[i]->flags = 0;
+ matchstate.cache[i]->keep = 0;
regfree(&matchstate.cache[i]->re);
}
}
@@ -90,7 +84,7 @@ regcache(const char* pattern, regflags_t reflags, int* status)
int empty;
int unused;
int old;
- Pattern_t head;
+ Key_t key;
/*
* 0 pattern flushes the cache and reflags>0 extends cache
@@ -137,25 +131,18 @@ regcache(const char* pattern, regflags_t reflags, int* status)
* check if the pattern is in the cache
*/
- for (i = 0; i < sizeof(unsigned long) && pattern[i]; i++)
- head.buf[i] = pattern[i];
- for (; i < sizeof(unsigned long); i++)
- head.buf[i] = 0;
+ for (i = 0; i < sizeof(key) && pattern[i]; i++)
+ ((char*)&key)[i] = pattern[i];
+ for (; i < sizeof(key); i++)
+ ((char*)&key)[i] = 0;
empty = unused = -1;
old = 0;
for (i = matchstate.size; i--;)
if (!matchstate.cache[i])
empty = i;
- else if (!(matchstate.cache[i]->flags & KEEP))
- {
- if (matchstate.cache[i]->flags)
- {
- matchstate.cache[i]->flags = 0;
- regfree(&matchstate.cache[i]->re);
- }
+ else if (!matchstate.cache[i]->keep)
unused = i;
- }
- else if (matchstate.cache[i]->pattern.key == head.key && !strcmp(matchstate.cache[i]->pattern.buf, pattern) && matchstate.cache[i]->reflags == reflags)
+ else if (*(Key_t*)matchstate.cache[i]->pattern == key && !strcmp(matchstate.cache[i]->pattern, pattern) && matchstate.cache[i]->reflags == reflags)
break;
else if (!matchstate.cache[old] || matchstate.cache[old]->serial > matchstate.cache[i]->serial)
old = i;
@@ -174,29 +161,33 @@ regcache(const char* pattern, regflags_t reflags, int* status)
*status = REG_ESPACE;
return 0;
}
- if (cp->flags)
+ if (cp->keep)
{
- cp->flags = 0;
+ cp->keep = 0;
regfree(&cp->re);
}
- cp->reflags = reflags;
- if ((i = strlen(pattern)) < sizeof(cp->pattern.buf))
+ if ((i = strlen(pattern) + 1) >= cp->size)
{
- if (i < sizeof(unsigned long))
- memset(cp->pattern.buf, 0, sizeof(unsigned long));
- strcpy(cp->pattern.buf, pattern);
- pattern = (const char*)cp->pattern.buf;
- cp->flags = KEEP;
+ cp->size = roundof(i, ROUND);
+ if (!(cp->pattern = newof(cp->pattern, char, cp->size, 0)))
+ {
+ if (status)
+ *status = REG_ESPACE;
+ return 0;
+ }
}
- else
- cp->flags = DROP;
- if (i = regcomp(&cp->re, pattern, cp->reflags))
+ strcpy(cp->pattern, pattern);
+ while (++i < sizeof(Key_t))
+ cp->pattern[i] = 0;
+ pattern = (const char*)cp->pattern;
+ if (i = regcomp(&cp->re, pattern, reflags))
{
if (status)
*status = i;
- cp->flags = 0;
return 0;
}
+ cp->keep = 1;
+ cp->reflags = reflags;
}
else
cp = matchstate.cache[i];
diff --git a/usr/src/lib/libast/common/regex/regclass.c b/usr/src/lib/libast/common/regex/regclass.c
index b68ef4b00b..e908d6821c 100644
--- a/usr/src/lib/libast/common/regex/regclass.c
+++ b/usr/src/lib/libast/common/regex/regclass.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libast/common/regex/regcoll.c b/usr/src/lib/libast/common/regex/regcoll.c
index 178b635790..240dcc1f4c 100644
--- a/usr/src/lib/libast/common/regex/regcoll.c
+++ b/usr/src/lib/libast/common/regex/regcoll.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libast/common/regex/regcomp.c b/usr/src/lib/libast/common/regex/regcomp.c
index 90098dfbc2..4573cc217b 100644
--- a/usr/src/lib/libast/common/regex/regcomp.c
+++ b/usr/src/lib/libast/common/regex/regcomp.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -85,6 +85,7 @@ typedef struct Stats_s
unsigned short a; /* number of alternations */
unsigned short b; /* number of backrefs */
unsigned short c; /* number of closures */
+ unsigned short e; /* $ */
unsigned short i; /* number of negations */
unsigned short p; /* number of named subexpressions */
unsigned short s; /* number of simple closures */
@@ -461,6 +462,9 @@ stats(register Cenv_t* env, register Rex_t* e)
if ((env->stats.n += cn) < nn)
return 1;
break;
+ case REX_END:
+ env->stats.e = 1;
+ break;
case REX_GROUP:
if (e->re.group.number && ++env->stats.p <= 0 || !e->re.group.number && ++env->stats.u <= 0)
return 1;
@@ -995,9 +999,9 @@ token(register Cenv_t* env)
}
else if (c == '^')
{
- if (env->type == BRE && (env->cursor == env->pattern || posixkludge))
+ if (env->type == BRE && (env->cursor == env->pattern || posixkludge == 1))
{
- env->posixkludge = 1;
+ env->posixkludge = 2;
return T_CFLX;
}
}
@@ -1069,7 +1073,7 @@ col(Celt_t* ce, int ic, unsigned char* bp, int bw, int bc, unsigned char* ep, in
if (cc > 0)
{
cc = -1;
- k += wctomb((char*)k, c);
+ k += mbconv((char*)k, c);
}
else
for (e = k + bw; k < e; *k++ = *s++);
@@ -1125,7 +1129,7 @@ col(Celt_t* ce, int ic, unsigned char* bp, int bw, int bc, unsigned char* ep, in
if (cc > 0)
{
cc = -1;
- k += wctomb((char*)k, c);
+ k += mbconv((char*)k, c);
}
else
for (e = k + ew; k < e; *k++ = *s++);
@@ -1199,10 +1203,10 @@ bra(Cenv_t* env)
inrange = 0;
for (;;)
{
- if (!(c = *env->cursor) || c == env->terminator || (env->flags & REG_ESCAPE) && c == env->delimiter)
+ if (!(c = *env->cursor) || c == env->terminator || c == env->delimiter && (env->flags & REG_ESCAPE))
goto error;
env->cursor += (w = MBSIZE(env->cursor));
- if (c == '\\')
+ if (c == '\\' && ((env->flags & REG_CLASS_ESCAPE) || env->type >= SRE && env->parnest || *env->cursor == env->delimiter && (env->flags & REG_ESCAPE)))
{
if (*env->cursor)
{
@@ -1380,18 +1384,24 @@ bra(Cenv_t* env)
complicated++;
if (inrange == 2)
{
- if (last > c)
+ if (last <= c)
+ {
+ for (i = last; i <= c; i++)
+ setadd(e->re.charclass, i);
+ inrange = env->type >= SRE || (env->flags & REG_LENIENT);
+ elements += 2;
+ }
+ else if (env->type >= SRE)
{
- if (env->type < SRE && !(env->flags & REG_LENIENT))
- goto erange;
setadd(e->re.charclass, last);
setadd(e->re.charclass, c);
+ elements += 2;
+ inrange = 1;
}
+ else if (!(env->flags & REG_LENIENT))
+ goto erange;
else
- for (i = last; i <= c; i++)
- setadd(e->re.charclass, i);
- inrange = env->type >= SRE || (env->flags & REG_LENIENT);
- elements += 2;
+ inrange = 0;
}
else if (inrange == 1)
{
@@ -1465,7 +1475,7 @@ bra(Cenv_t* env)
goto error;
pp = env->cursor;
env->cursor += (w = MBSIZE(env->cursor));
- if (c == '\\')
+ if (c == '\\' && ((env->flags & REG_CLASS_ESCAPE) || env->type >= SRE && env->parnest || *env->cursor == env->delimiter && (env->flags & REG_ESCAPE)))
{
if (*env->cursor)
{
@@ -1497,7 +1507,7 @@ bra(Cenv_t* env)
if (env->token.len > 1 || w >= 0 && w < T_META)
{
c = w;
- w = wctomb(mbc, c);
+ w = mbconv(mbc, c);
pp = (unsigned char*)mbc;
env->cursor += env->token.len;
}
@@ -1597,7 +1607,7 @@ bra(Cenv_t* env)
if (iswupper(wc))
{
wc = towlower(wc);
- rw = wctomb((char*)pp, wc);
+ rw = mbconv((char*)pp, wc);
c = 'u';
}
else if (iswlower(wc))
@@ -1635,7 +1645,7 @@ bra(Cenv_t* env)
wc = towupper(wc);
c = 'U';
}
- rw = wctomb((char*)pp, wc);
+ rw = mbconv((char*)pp, wc);
}
inrange = 0;
c = *pp;
@@ -2048,6 +2058,7 @@ grp(Cenv_t* env, int parno)
case 'M': /* glob(3) */
case 'N': /* glob(3) */
case 'O': /* glob(3) */
+ case 'P':
case 'R': /* pcre */
case 'S':
case 'U': /* pcre */
@@ -2138,28 +2149,28 @@ grp(Cenv_t* env, int parno)
env->flags &= ~REG_COMMENT;
break;
case 'A':
- env->flags &= ~(REG_AUGMENTED|REG_EXTENDED|REG_LITERAL|REG_SHELL|REG_LEFT|REG_RIGHT);
+ env->flags &= ~(REG_AUGMENTED|REG_EXTENDED|REG_LITERAL|REG_SHELL|REG_LEFT|REG_RIGHT|REG_CLASS_ESCAPE);
env->flags |= REG_AUGMENTED|REG_EXTENDED;
typ = ARE;
break;
case 'B':
case 'G':
- env->flags &= ~(REG_AUGMENTED|REG_EXTENDED|REG_LITERAL|REG_SHELL|REG_LEFT|REG_RIGHT);
+ env->flags &= ~(REG_AUGMENTED|REG_EXTENDED|REG_LITERAL|REG_SHELL|REG_LEFT|REG_RIGHT|REG_CLASS_ESCAPE);
typ = BRE;
break;
case 'E':
- env->flags &= ~(REG_AUGMENTED|REG_EXTENDED|REG_LITERAL|REG_SHELL|REG_LEFT|REG_RIGHT);
+ env->flags &= ~(REG_AUGMENTED|REG_EXTENDED|REG_LITERAL|REG_SHELL|REG_LEFT|REG_RIGHT|REG_CLASS_ESCAPE);
env->flags |= REG_EXTENDED;
typ = ERE;
break;
case 'F':
case 'L':
- env->flags &= ~(REG_AUGMENTED|REG_EXTENDED|REG_LITERAL|REG_SHELL|REG_LEFT|REG_RIGHT);
+ env->flags &= ~(REG_AUGMENTED|REG_EXTENDED|REG_LITERAL|REG_SHELL|REG_LEFT|REG_RIGHT|REG_CLASS_ESCAPE);
env->flags |= REG_LITERAL;
typ = ERE;
break;
case 'K':
- env->flags &= ~(REG_AUGMENTED|REG_EXTENDED|REG_LITERAL|REG_SHELL|REG_LEFT|REG_RIGHT);
+ env->flags &= ~(REG_AUGMENTED|REG_EXTENDED|REG_LITERAL|REG_SHELL|REG_LEFT|REG_RIGHT|REG_CLASS_ESCAPE);
env->flags |= REG_AUGMENTED|REG_SHELL|REG_LEFT|REG_RIGHT;
typ = KRE;
break;
@@ -2172,8 +2183,13 @@ grp(Cenv_t* env, int parno)
case 'O':
/* used by caller to disable glob(3) GLOB_STARSTAR */
break;
+ case 'P':
+ env->flags &= ~(REG_AUGMENTED|REG_EXTENDED|REG_LITERAL|REG_SHELL|REG_LEFT|REG_RIGHT|REG_CLASS_ESCAPE);
+ env->flags |= REG_EXTENDED|REG_CLASS_ESCAPE;
+ typ = ERE;
+ break;
case 'S':
- env->flags &= ~(REG_AUGMENTED|REG_EXTENDED|REG_LITERAL|REG_SHELL|REG_LEFT|REG_RIGHT);
+ env->flags &= ~(REG_AUGMENTED|REG_EXTENDED|REG_LITERAL|REG_SHELL|REG_LEFT|REG_RIGHT|REG_CLASS_ESCAPE);
env->flags |= REG_SHELL|REG_LEFT|REG_RIGHT;
typ = SRE;
break;
@@ -2549,7 +2565,7 @@ seq(Cenv_t* env)
c = towupper(c);
if ((&buf[sizeof(buf)] - s) < MB_CUR_MAX)
break;
- if ((n = wctomb((char*)s, c)) < 0)
+ if ((n = mbconv((char*)s, c)) < 0)
*s++ = c;
else if (n)
s += n;
@@ -3004,7 +3020,7 @@ special(Cenv_t* env, regex_t* p)
a->re.bm.back = (y == e || y == e->re.group.expr.rex) ? (m - n) : -1;
a->re.bm.left = l - 1;
a->re.bm.right = env->stats.m - l - n;
- a->re.bm.complete = (y != e && (e->type != REX_GROUP || y != e->re.group.expr.rex) || e->next || ((a->re.bm.left + a->re.bm.right) >= 0)) ? 0 : n;
+ a->re.bm.complete = (env->stats.e || y != e && (e->type != REX_GROUP || y != e->re.group.expr.rex) || e->next || ((a->re.bm.left + a->re.bm.right) >= 0)) ? 0 : n;
h = (Bm_mask_t*)&a->re.bm.mask[n];
a->re.bm.skip = (size_t*)(h + n * (UCHAR_MAX + 1));
a->re.bm.fail = &a->re.bm.skip[UCHAR_MAX + 1];
@@ -3394,6 +3410,7 @@ regcomb(regex_t* p, regex_t* q)
Rex_t* e = p->env->rex;
Rex_t* f = q->env->rex;
Rex_t* g;
+ Rex_t* h;
Cenv_t env;
if (!e || !f)
@@ -3428,13 +3445,15 @@ regcomb(regex_t* p, regex_t* q)
drop(env.disc, f);
f = q->env->rex;
}
- if (e->next && e->next->type == REX_END && f->next && f->next->type == REX_END)
+ for (g = e; g->next; g = g->next);
+ for (h = f; h->next; h = h->next);
+ if (g->next && g->next->type == REX_END && h->next && h->next->type == REX_END)
{
p->env->flags |= REG_RIGHT;
- drop(env.disc, e->next);
- e->next = 0;
- drop(env.disc, f->next);
- f->next = 0;
+ drop(env.disc, g->next);
+ g->next = 0;
+ drop(env.disc, h->next);
+ h->next = 0;
}
if (!(g = trie(&env, f, e)))
return fatal(p->env->disc, REG_BADPAT, NiL);
diff --git a/usr/src/lib/libast/common/regex/regdecomp.c b/usr/src/lib/libast/common/regex/regdecomp.c
index a89722480a..1f239615b1 100644
--- a/usr/src/lib/libast/common/regex/regdecomp.c
+++ b/usr/src/lib/libast/common/regex/regdecomp.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -75,6 +75,7 @@ decomp(register Rex_t* e, Sfio_t* sp, int type, int delimiter, regflags_t flags)
unsigned char* s;
unsigned char* t;
int c;
+ int m;
int cb;
int cd;
int cr;
@@ -152,19 +153,19 @@ decomp(register Rex_t* e, Sfio_t* sp, int type, int delimiter, regflags_t flags)
cb = cd = cr = 0;
s = nc;
t = ic;
- for (c = 0; c <= UCHAR_MAX; c++)
- if (settst(e->re.charclass, c))
+ for (m = 0; m <= UCHAR_MAX; m++)
+ if (settst(e->re.charclass, m))
{
- if (c == ']')
+ if (m == ']')
cb = 1;
- else if (c == '-')
+ else if (m == '-')
cr = 1;
- else if (c == delimiter)
+ else if (m == delimiter)
cd = 1;
else if (nb < 0)
- ne = nb = c;
- else if (ne == (c - 1))
- ne = c;
+ ne = nb = m;
+ else if (ne == (m - 1))
+ ne = m;
else
{
if (ne == nb)
@@ -175,21 +176,21 @@ decomp(register Rex_t* e, Sfio_t* sp, int type, int delimiter, regflags_t flags)
*s++ = '-';
*s++ = ne;
}
- ne = nb = c;
+ ne = nb = m;
}
}
else
{
- if (c == ']')
+ if (m == ']')
cb = -1;
- else if (c == '-')
+ else if (m == '-')
cr = -1;
- else if (c == delimiter)
+ else if (m == delimiter)
cd = -1;
else if (ib < 0)
- ie = ib = c;
- else if (ie == (c - 1))
- ie = c;
+ ie = ib = m;
+ else if (ie == (m - 1))
+ ie = m;
else
{
if (ie == ib)
@@ -200,7 +201,7 @@ decomp(register Rex_t* e, Sfio_t* sp, int type, int delimiter, regflags_t flags)
*t++ = '-';
*t++ = ie;
}
- ie = ib = c;
+ ie = ib = m;
}
}
if (nb >= 0)
@@ -228,7 +229,7 @@ decomp(register Rex_t* e, Sfio_t* sp, int type, int delimiter, regflags_t flags)
sfputc(sp, ']');
if (cr < 0)
sfputc(sp, '-');
- if (cd < 0)
+ if (cd < 0 && delimiter > 0)
{
if (flags & REG_ESCAPE)
sfputc(sp, '\\');
@@ -242,7 +243,7 @@ decomp(register Rex_t* e, Sfio_t* sp, int type, int delimiter, regflags_t flags)
sfputc(sp, ']');
if (cr > 0)
sfputc(sp, '-');
- if (cd > 0)
+ if (cd > 0 && delimiter > 0)
{
if (flags & REG_ESCAPE)
sfputc(sp, '\\');
@@ -400,7 +401,7 @@ regdecomp(regex_t* p, regflags_t flags, char* buf, size_t n)
if (!(sp = sfstropen()))
return 0;
- if (flags < 0)
+ if (flags == (regflags_t)~0)
flags = p->env->flags;
switch (flags & (REG_AUGMENTED|REG_EXTENDED|REG_SHELL))
{
@@ -427,12 +428,12 @@ regdecomp(regex_t* p, regflags_t flags, char* buf, size_t n)
sfputc(sp, delimiter);
}
else
- delimiter = 0;
+ delimiter = -1;
if (decomp(p->env->rex, sp, type, delimiter, flags))
r = 0;
else
{
- if (delimiter)
+ if (delimiter > 0)
sfputc(sp, delimiter);
if ((r = sfstrtell(sp) + 1) <= n)
{
diff --git a/usr/src/lib/libast/common/regex/regerror.c b/usr/src/lib/libast/common/regex/regerror.c
index 596e62ce45..3899e47008 100644
--- a/usr/src/lib/libast/common/regex/regerror.c
+++ b/usr/src/lib/libast/common/regex/regerror.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -25,7 +25,7 @@
* posix regex error message handler
*/
-static const char id[] = "\n@(#)$Id: regex (AT&T Research) 2008-05-11 $\0\n";
+static const char id[] = "\n@(#)$Id: regex (AT&T Research) 2009-12-11 $\0\n";
#include "reglib.h"
@@ -45,7 +45,7 @@ static const char* reg_error[] =
/* REG_BADBR */ "invalid {...} digits",
/* REG_ERANGE */ "invalid [...] range endpoint",
/* REG_ESPACE */ "out of space",
- /* REG_BADRPT */ "unary op not preceeded by re",
+ /* REG_BADRPT */ "unary op not preceded by re",
/* REG_ENULL */ "empty subexpr in pattern",
/* REG_ECOUNT */ "re component count overflow",
/* REG_BADESC */ "invalid \\char escape",
diff --git a/usr/src/lib/libast/common/regex/regexec.c b/usr/src/lib/libast/common/regex/regexec.c
index 3293c2207e..e73efa09bc 100644
--- a/usr/src/lib/libast/common/regex/regexec.c
+++ b/usr/src/lib/libast/common/regex/regexec.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libast/common/regex/regfatal.c b/usr/src/lib/libast/common/regex/regfatal.c
index ccf3a1ec44..ae48477e90 100644
--- a/usr/src/lib/libast/common/regex/regfatal.c
+++ b/usr/src/lib/libast/common/regex/regfatal.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libast/common/regex/reginit.c b/usr/src/lib/libast/common/regex/reginit.c
index 133702b721..23066fa5b5 100644
--- a/usr/src/lib/libast/common/regex/reginit.c
+++ b/usr/src/lib/libast/common/regex/reginit.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libast/common/regex/reglib.h b/usr/src/lib/libast/common/regex/reglib.h
index 25f461debe..8d2d3ea707 100644
--- a/usr/src/lib/libast/common/regex/reglib.h
+++ b/usr/src/lib/libast/common/regex/reglib.h
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libast/common/regex/regnexec.c b/usr/src/lib/libast/common/regex/regnexec.c
index 28763b471a..13bb1b7238 100644
--- a/usr/src/lib/libast/common/regex/regnexec.c
+++ b/usr/src/lib/libast/common/regex/regnexec.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -628,7 +628,7 @@ collic(register Celt_t* ce, char* key, register char* nxt, int c, int x)
c = towlower(c);
else
return 0;
- x = wctomb(key, c);
+ x = mbconv(key, c);
key[x] = 0;
return collelt(ce, key, c, 0);
}
diff --git a/usr/src/lib/libast/common/regex/regrecord.c b/usr/src/lib/libast/common/regex/regrecord.c
index 1f531aa63a..1a3b428ac1 100644
--- a/usr/src/lib/libast/common/regex/regrecord.c
+++ b/usr/src/lib/libast/common/regex/regrecord.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libast/common/regex/regrexec.c b/usr/src/lib/libast/common/regex/regrexec.c
index 4b49a57d63..a6d5fb5351 100644
--- a/usr/src/lib/libast/common/regex/regrexec.c
+++ b/usr/src/lib/libast/common/regex/regrexec.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libast/common/regex/regstat.c b/usr/src/lib/libast/common/regex/regstat.c
index c896068672..456bec1e86 100644
--- a/usr/src/lib/libast/common/regex/regstat.c
+++ b/usr/src/lib/libast/common/regex/regstat.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libast/common/regex/regsub.c b/usr/src/lib/libast/common/regex/regsub.c
index 749c9d1a13..288ed1418f 100644
--- a/usr/src/lib/libast/common/regex/regsub.c
+++ b/usr/src/lib/libast/common/regex/regsub.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libast/common/regex/regsubcomp.c b/usr/src/lib/libast/common/regex/regsubcomp.c
index d7b3625049..bc0f866a40 100644
--- a/usr/src/lib/libast/common/regex/regsubcomp.c
+++ b/usr/src/lib/libast/common/regex/regsubcomp.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libast/common/regex/regsubexec.c b/usr/src/lib/libast/common/regex/regsubexec.c
index b4599ee5a1..d94635b548 100644
--- a/usr/src/lib/libast/common/regex/regsubexec.c
+++ b/usr/src/lib/libast/common/regex/regsubexec.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libast/common/regex/ucs_names.h b/usr/src/lib/libast/common/regex/ucs_names.h
index 13acdd5edd..c97e48d916 100644
--- a/usr/src/lib/libast/common/regex/ucs_names.h
+++ b/usr/src/lib/libast/common/regex/ucs_names.h
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1985-2009 AT&T Intellectual Property *
+* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *