char *s=str; int i,j; int sizerest,chars,chr; while (1){ #ifndef FNMATCH_PREFIX #else struct states *state; #define ADDSTATE state=calloc(1,sizeof(struct states));state->next=ret->states; ret->states=state; state->p=p; if (!*s){ ADDSTATE; return 0; } #endif switch (p->chr.tp){ case PATTERN_chr: if (*s != p->chr.chr) return FNM_NOMATCH; NEXTPATTERN(chr); s++; break; case PATTERN_chars: #ifndef FNMATCH_PREFIX if ((* (UINT *)s)!=p->chars.chars) return FNM_NOMATCH; s+=UINTSIZE; NEXTPATTERN(chars); #else ; int re=p->chars.chars; char *c=(char *) &re; NEXTPATTERN(chars) for (i=0;i<4;i++){ if (!*(s+i)){ ADDSTATE *((int *)ret->states->pattern_prefix)=re; } if (*(s+i)!=*(c+i)) return FNM_NOMATCH; re=re<<8; } #endif break; case PATTERN_qst: s+=1; NEXTPATTERN(qst); break; case PATTERN_star: ; #ifndef FNMATCH_PREFIX sizerest= p->star.sizerest; chr= p->star.chr; NEXTPATTERN(star); for (i=s-str;i<=len-sizerest ; i++ ) { if (( *(str+i) == chr) && !fnmatch2_internal(p,str+i+1,len-i-1)) return 0; } return FNM_NOMATCH; #else ADDSTATE chr= p->star.chr; NEXTPATTERN(star); for (i=s-str;ibracket.chars; while (*ch) if (*ch++==*s) goto cont; return FNM_NOMATCH; cont:; break; } }