1 /* $OpenBSD: fnm_test.c,v 1.3 2019/01/25 00:19:26 millert Exp $ */
2
3 /*
4 * Public domain, 2008, Todd C. Miller <millert@openbsd.org>
5 */
6
7 #include <err.h>
8 #include <fnmatch.h>
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <util.h>
12
13 int
main(int argc,char ** argv)14 main(int argc, char **argv)
15 {
16 FILE *fp = stdin;
17 char pattern[1024], string[1024];
18 char *line;
19 const char delim[3] = {'\0', '\0', '#'};
20 int errors = 0, flags, got, want;
21
22 if (argc > 1) {
23 if ((fp = fopen(argv[1], "r")) == NULL)
24 err(1, "%s", argv[1]);
25 }
26
27 /*
28 * Read in test file, which is formatted thusly:
29 *
30 * pattern string flags expected_result
31 *
32 * lines starting with '#' are comments
33 */
34 for (;;) {
35 line = fparseln(fp, NULL, NULL, delim, 0);
36 if (!line)
37 break;
38 got = sscanf(line, "%s %s 0x%x %d", pattern, string, &flags,
39 &want);
40 if (got == EOF) {
41 free(line);
42 break;
43 }
44 if (pattern[0] == '#') {
45 free(line);
46 continue;
47 }
48 if (got == 4) {
49 got = fnmatch(pattern, string, flags);
50 if (got != want) {
51 warnx("%s %s %d: want %d, got %d", pattern,
52 string, flags, want, got);
53 errors++;
54 }
55 } else {
56 warnx("unrecognized line '%s'\n", line);
57 errors++;
58 }
59 free(line);
60 }
61 exit(errors);
62 }
63