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); }
/* 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; }
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; }
int strmatch(const char* s, const char* p) { return strgrpmatch(s, p, NiL, 0, STR_MAXIMAL|STR_LEFT|STR_RIGHT); }