#include #include #include int main(int argc, char *argv[]) { int st = EXIT_SUCCESS; const char *pattern = "*.foo"; struct test { char *str; int expect; int flags; } tests[] = { { .str = "a.foo", .expect = 0, .flags = FNM_PATHNAME}, { .str = "a.foo", .expect = 0, .flags = 0}, { .str = "bar/a.foo", .expect = FNM_NOMATCH, .flags = FNM_PATHNAME }, { .str = "bar/a.foo", .expect = 0, .flags = 0}, }; #define SIZEOF_ARRAY(a) (sizeof(a)/sizeof(a[0])) unsigned i; for (i = 0; i < SIZEOF_ARRAY(tests); i++) { struct test *t = tests + i; printf("fnmatch(%s, %s, %d) = ", pattern, t->str, t->flags); int ret = fnmatch(pattern, t->str, t->flags); if (ret == FNM_NOMATCH) printf("FNM_NOMATCH"); else printf("%d", ret); if (ret == t->expect) printf(" -> Ok\n"); else { printf(" -> FAIL\n"); st = EXIT_FAILURE; } } return st; }