1 /***********************************************************************
3 * This software is part of the ast package *
4 * Copyright (c) 1985-2010 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Common Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
9 * A copy of the License is available at *
10 * http://www.opensource.org/licenses/cpl1.0.txt *
11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
13 * Information and Software Systems Research *
17 * Glenn Fowler <gsf@research.att.com> *
18 * David Korn <dgk@research.att.com> *
19 * Phong Vo <kpv@research.att.com> *
21 ***********************************************************************/
25 * posix regex state and alloc
43 * state shared by all threads
52 * the "funny" things get special treatment at ends of BRE
54 * BRE 0:normal 1:escaped 2:escaped-char-class
55 * ERE 3:normal 4:escaped 5:escaped-char-class
56 * ARE 6:normal 7:escaped 8:escaped-char-class
57 * SRE 9:normal 10:escaped 11:escaped-char-class
58 * KRE 12:normal 13:escaped 14:escaped-char-class
168 T_PERCENT
, '%', T_BAD
,
185 '0', T_BACK
+0, T_ESCAPE
,
186 '0', T_BACK
+0, T_ESCAPE
,
187 '0', T_BACK
+0, T_ESCAPE
,
188 '0', T_BACK
+0, T_ESCAPE
,
189 '0', T_BACK
+0, T_ESCAPE
,
191 '1', T_BACK
+1, T_ESCAPE
,
192 '1', T_BACK
+1, T_ESCAPE
,
193 '1', T_BACK
+1, T_ESCAPE
,
194 '1', T_BACK
+1, T_ESCAPE
,
195 '1', T_BACK
+1, T_ESCAPE
,
197 '2', T_BACK
+2, T_ESCAPE
,
198 '2', T_BACK
+2, T_ESCAPE
,
199 '2', T_BACK
+2, T_ESCAPE
,
200 '2', T_BACK
+2, T_ESCAPE
,
201 '2', T_BACK
+2, T_ESCAPE
,
203 '3', T_BACK
+3, T_ESCAPE
,
204 '3', T_BACK
+3, T_ESCAPE
,
205 '3', T_BACK
+3, T_ESCAPE
,
206 '3', T_BACK
+3, T_ESCAPE
,
207 '3', T_BACK
+3, T_ESCAPE
,
209 '4', T_BACK
+4, T_ESCAPE
,
210 '4', T_BACK
+4, T_ESCAPE
,
211 '4', T_BACK
+4, T_ESCAPE
,
212 '4', T_BACK
+4, T_ESCAPE
,
213 '4', T_BACK
+4, T_ESCAPE
,
215 '5', T_BACK
+5, T_ESCAPE
,
216 '5', T_BACK
+5, T_ESCAPE
,
217 '5', T_BACK
+5, T_ESCAPE
,
218 '5', T_BACK
+5, T_ESCAPE
,
219 '5', T_BACK
+5, T_ESCAPE
,
221 '6', T_BACK
+6, T_ESCAPE
,
222 '6', T_BACK
+6, T_ESCAPE
,
223 '6', T_BACK
+6, T_ESCAPE
,
224 '6', T_BACK
+6, T_ESCAPE
,
225 '6', T_BACK
+6, T_ESCAPE
,
227 '7', T_BACK
+7, T_ESCAPE
,
228 '7', T_BACK
+7, T_ESCAPE
,
229 '7', T_BACK
+7, T_ESCAPE
,
230 '7', T_BACK
+7, T_ESCAPE
,
231 '7', T_BACK
+7, T_ESCAPE
,
233 '8', T_BACK
+8, T_ESCAPE
,
234 '8', T_BACK
+8, T_ESCAPE
,
235 '8', T_BACK
+8, T_ESCAPE
,
237 '8', T_BACK
+8, T_ESCAPE
,
239 '9', T_BACK
+9, T_ESCAPE
,
240 '9', T_BACK
+9, T_ESCAPE
,
241 '9', T_BACK
+9, T_ESCAPE
,
243 '9', T_BACK
+9, T_ESCAPE
,
248 'A', T_BEG_STR
, T_BAD
,
249 'A', T_BEG_STR
, T_BAD
,
250 'A', T_BEG_STR
, T_BAD
,
251 'A', T_BEG_STR
, T_BAD
,
252 'A', T_BEG_STR
, T_BAD
,
260 'B', T_WORD_NOT
, T_BAD
,
261 'B', T_WORD_NOT
, T_BAD
,
262 'B', T_WORD_NOT
, T_BAD
,
263 'B', T_WORD_NOT
, T_BAD
,
264 'B', T_WORD_NOT
, T_BAD
,
266 'd', T_DIGIT
, T_DIGIT
,
267 'd', T_DIGIT
, T_DIGIT
,
268 'd', T_DIGIT
, T_DIGIT
,
269 'd', T_DIGIT
, T_DIGIT
,
270 'd', T_DIGIT
, T_DIGIT
,
272 'D', T_DIGIT_NOT
, T_DIGIT_NOT
,
273 'D', T_DIGIT_NOT
, T_DIGIT_NOT
,
274 'D', T_DIGIT_NOT
, T_DIGIT_NOT
,
275 'D', T_DIGIT_NOT
, T_DIGIT_NOT
,
276 'D', T_DIGIT_NOT
, T_DIGIT_NOT
,
278 's', T_SPACE
, T_SPACE
,
279 's', T_SPACE
, T_SPACE
,
280 's', T_SPACE
, T_SPACE
,
281 's', T_SPACE
, T_SPACE
,
282 's', T_SPACE
, T_SPACE
,
284 'S', T_SPACE_NOT
, T_SPACE_NOT
,
285 'S', T_SPACE_NOT
, T_SPACE_NOT
,
286 'S', T_SPACE_NOT
, T_SPACE_NOT
,
287 'S', T_SPACE_NOT
, T_SPACE_NOT
,
288 'S', T_SPACE_NOT
, T_SPACE_NOT
,
290 'w', T_ALNUM
, T_ALNUM
,
291 'w', T_ALNUM
, T_ALNUM
,
292 'w', T_ALNUM
, T_ALNUM
,
293 'w', T_ALNUM
, T_ALNUM
,
294 'w', T_ALNUM
, T_ALNUM
,
296 'W', T_ALNUM_NOT
, T_ALNUM_NOT
,
297 'W', T_ALNUM_NOT
, T_ALNUM_NOT
,
298 'W', T_ALNUM_NOT
, T_ALNUM_NOT
,
299 'W', T_ALNUM_NOT
, T_ALNUM_NOT
,
300 'W', T_ALNUM_NOT
, T_ALNUM_NOT
,
302 'z', T_FIN_STR
, T_BAD
,
303 'z', T_FIN_STR
, T_BAD
,
304 'z', T_FIN_STR
, T_BAD
,
305 'z', T_FIN_STR
, T_BAD
,
306 'z', T_FIN_STR
, T_BAD
,
308 'Z', T_END_STR
, T_BAD
,
309 'Z', T_END_STR
, T_BAD
,
310 'Z', T_END_STR
, T_BAD
,
311 'Z', T_END_STR
, T_BAD
,
312 'Z', T_END_STR
, T_BAD
,
323 'c', T_ESCAPE
, T_ESCAPE
,
324 'c', T_ESCAPE
, T_ESCAPE
,
325 'c', T_ESCAPE
, T_ESCAPE
,
326 'c', T_ESCAPE
, T_ESCAPE
,
327 'c', T_ESCAPE
, T_ESCAPE
,
329 'C', T_ESCAPE
, T_ESCAPE
,
330 'C', T_ESCAPE
, T_ESCAPE
,
331 'C', T_ESCAPE
, T_ESCAPE
,
332 'C', T_ESCAPE
, T_ESCAPE
,
333 'C', T_ESCAPE
, T_ESCAPE
,
377 'x', T_ESCAPE
, T_ESCAPE
,
378 'x', T_ESCAPE
, T_ESCAPE
,
379 'x', T_ESCAPE
, T_ESCAPE
,
380 'x', T_ESCAPE
, T_ESCAPE
,
381 'x', T_ESCAPE
, T_ESCAPE
,
385 * all allocation/free done here
386 * interface compatible with vmresize()
388 * malloc(n) alloc(0,n)
389 * realloc(p,n) alloc(p,n)
394 alloc(register regdisc_t
* disc
, void* p
, size_t n
)
396 if (disc
->re_resizef
)
398 if (!n
&& (disc
->re_flags
& REG_NOFREE
))
400 return (*disc
->re_resizef
)(disc
->re_resizehandle
, p
, n
);
404 if (!(disc
->re_flags
& REG_NOFREE
))
409 return realloc(p
, n
);