--- regex2.h.orig 2004-11-25 11:38:32.000000000 -0800 +++ regex2.h 2005-02-24 14:26:21.000000000 -0800 @@ -127,9 +127,10 @@ } cset; static int -CHIN1(cs, ch) +CHIN1(cs, ch, loc) cset *cs; wint_t ch; +locale_t loc; { int i; @@ -144,15 +145,16 @@ if (cs->ranges[i].min <= ch && ch <= cs->ranges[i].max) return (!cs->invert); for (i = 0; i < cs->ntypes; i++) - if (iswctype(ch, cs->types[i])) + if (iswctype_l(ch, cs->types[i], loc)) return (!cs->invert); return (cs->invert); } static __inline int -CHIN(cs, ch) +CHIN(cs, ch, loc) cset *cs; wint_t ch; +locale_t loc; { assert(ch >= 0); @@ -160,10 +162,10 @@ return (((cs->bmp[ch >> 3] & (1 << (ch & 7))) != 0) ^ cs->invert); else if (cs->icase) - return (CHIN1(cs, ch) || CHIN1(cs, towlower(ch)) || - CHIN1(cs, towupper(ch))); + return (CHIN1(cs, ch, loc) || CHIN1(cs, towlower_l(ch, loc), loc) || + CHIN1(cs, towupper_l(ch, loc), loc)); else - return (CHIN1(cs, ch)); + return (CHIN1(cs, ch, loc)); } /* @@ -193,8 +195,9 @@ size_t nsub; /* copy of re_nsub */ int backrefs; /* does it use back references? */ sopno nplus; /* how deep does it nest +s? */ + locale_t loc; /* current locale */ }; /* misc utilities */ #define OUT (-2) /* a non-character value */ -#define ISWORD(c) (iswalnum((uch)(c)) || (c) == '_') +#define ISWORD(c,l) (iswalnum_l((uch)(c), l) || (c) == '_')