예제 #1
0
파일: test.c 프로젝트: ISLEcode/kornshell
static int test_strmatch(Shell_t *shp,const char *str, const char *pat)
{
	regoff_t match[2*(MATCH_MAX+1)],n;
	register int c, m=0;
	register const char *cp=pat; 
	while(c = *cp++)
	{
		if(c=='(')
			m++;
		if(c=='\\' && *cp)
			cp++;
	}
	if(m)
		m++;
	else
		match[0] = 0;
	if(m >  elementsof(match)/2)
		m = elementsof(match)/2;
	n = strgrpmatch(str, pat, match, m, STR_GROUP|STR_MAXIMAL|STR_LEFT|STR_RIGHT);
	if(m==0 && n==1)
		match[1] = strlen(str);
	if(n)
		sh_setmatch(shp, str, -1, n, match, 0);
	return(n);
}
예제 #2
0
파일: actions.c 프로젝트: ellert/graphviz
/* match:
 * Return index of pattern pat in string str, or -1
 */
int match(char *str, char *pat)
{
    int sub[2];

    if (strgrpmatch(str, pat, sub, 1, STR_MAXIMAL)) {
	return (sub[0]);
    } else
	return -1;
}
예제 #3
0
int
ccmapid(const char* name)
{
	register const Ccmap_t*	mp;
	register int		c;
	const Ccmap_t*		bp;
	int			n;
	int			sub[2];

	bp = 0;
	n = 0;
	for (mp = maps; mp->name; mp++)
		if (strgrpmatch(name, mp->match, sub, elementsof(sub) / 2, STR_MAXIMAL|STR_LEFT|STR_ICASE))
		{
			if (!(c = name[sub[1]]))
				return mp->ccode;
			if (sub[1] > n && !isalpha(c))
			{
				n = sub[1];
				bp = mp;
			}
		}
	return bp ? bp->ccode : -1;
}
예제 #4
0
int
strmatch(const char* s, const char* p)
{
	return strgrpmatch(s, p, NiL, 0, STR_MAXIMAL|STR_LEFT|STR_RIGHT);
}