1 /*********************************************************************** 2 * * 3 * This software is part of the ast package * 4 * Copyright (c) 1985-2009 AT&T Intellectual Property * 5 * and is licensed under the * 6 * Common Public License, Version 1.0 * 7 * by AT&T Intellectual Property * 8 * * 9 * A copy of the License is available at * 10 * http://www.opensource.org/licenses/cpl1.0.txt * 11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 12 * * 13 * Information and Software Systems Research * 14 * AT&T Research * 15 * Florham Park NJ * 16 * * 17 * Glenn Fowler <gsf@research.att.com> * 18 * David Korn <dgk@research.att.com> * 19 * Phong Vo <kpv@research.att.com> * 20 * * 21 ***********************************************************************/ 22 #pragma prototyped 23 24 /* 25 * posix regex executor 26 * single unsized-string interface 27 */ 28 29 #include "reglib.h" 30 31 /* 32 * standard wrapper for the sized-record interface 33 */ 34 35 int 36 regexec(const regex_t* p, const char* s, size_t nmatch, regmatch_t* match, regflags_t flags) 37 { 38 if (flags & REG_STARTEND) 39 { 40 int r; 41 int m = match->rm_so; 42 regmatch_t* e; 43 44 if (!(r = regnexec(p, s + m, match->rm_eo - m, nmatch, match, flags)) && m > 0) 45 for (e = match + nmatch; match < e; match++) 46 if (match->rm_so >= 0) 47 { 48 match->rm_so += m; 49 match->rm_eo += m; 50 } 51 return r; 52 } 53 return regnexec(p, s, s ? strlen(s) : 0, nmatch, match, flags); 54 } 55