Exemplo n.º 1
0
int fnmatch(const char *pat, const char *str, int flags)
{
    const char *s, *p;
    size_t inc;
    int c;
    if (flags & FNM_PATHNAME) for (;;) {
            for (s=str; *s && *s!='/'; s++);
            for (p=pat; (c=pat_next(p, -1, &inc, flags))!=END && c!='/'; p+=inc);
            if (c!=*s && (!*s || !(flags & FNM_LEADING_DIR)))
                return FNM_NOMATCH;
            if (fnmatch_internal(pat, p-pat, str, s-str, flags))
                return FNM_NOMATCH;
            if (!c) return 0;
            str = s+1;
            pat = p+inc;
        }
    else if (flags & FNM_LEADING_DIR) {
        for (s=str; *s; s++) {
            if (*s != '/') continue;
            if (!fnmatch_internal(pat, -1, str, s-str, flags))
                return 0;
        }
    }
    return fnmatch_internal(pat, -1, str, -1, flags);
}
Exemplo n.º 2
0
int fnmatch(const char *pat, const char *str, int flags)
{
	const char *s, *p;
	size_t inc;
	int c;
	if (flags & FNM_PATHNAME) for (;;) {
		for (s=str; *s && *s!='/'; s++);
		for (p=pat; (c=pat_next(p, -1, &inc, flags))!=END && c!='/'; p+=inc);
		if (*s && *p!=*s) return FNM_NOMATCH;
		if (fnmatch_internal(pat, p-pat, str, s-str, flags))
			return FNM_NOMATCH;
		if (!*s && c==END) return 0;
		str = s+1;
		pat = p+1;
	}
	return fnmatch_internal(pat, -1, str, -1, flags);
}