Annotation of embedaddon/sudo/compat/regress/fnmatch/fnm_test.c, revision 1.1.1.1

1.1       misho       1: /*     $OpenBSD: fnm_test.c,v 1.1 2008/10/01 23:04:58 millert Exp $    */
                      2: 
                      3: /*
                      4:  * Public domain, 2008, Todd C. Miller <Todd.Miller@courtesan.com>
                      5:  */
                      6: 
                      7: #include <config.h>
                      8: 
                      9: #include <stdio.h>
                     10: #include <stdlib.h>
                     11: #ifdef HAVE_STRING_H
                     12: # include <string.h>
                     13: #endif /* HAVE_STRING_H */
                     14: #ifdef HAVE_STRINGS_H
                     15: # include <strings.h>
                     16: #endif /* HAVE_STRINGS_H */
                     17: #ifdef HAVE_FNMATCH
                     18: # include <fnmatch.h>
                     19: #else
                     20: # include "compat/fnmatch.h"
                     21: #endif
                     22: 
                     23: int
                     24: main(int argc, char *argv[])
                     25: {
                     26:        FILE *fp = stdin;
                     27:        char pattern[1024], string[1024], flagstr[1024];
                     28:        int errors = 0, tests = 0, flags, got, want;
                     29: 
                     30:        if (argc > 1) {
                     31:                if ((fp = fopen(argv[1], "r")) == NULL) {
                     32:                        perror(argv[1]);
                     33:                        exit(1);
                     34:                }
                     35:        }
                     36: 
                     37:        /*
                     38:         * Read in test file, which is formatted thusly:
                     39:         *
                     40:         * pattern string flags expected_result
                     41:         *
                     42:         */
                     43:        for (;;) {
                     44:                got = fscanf(fp, "%s %s %s %d\n", pattern, string, flagstr,
                     45:                    &want);
                     46:                if (got == EOF)
                     47:                        break;
                     48:                if (got == 4) {
                     49:                        flags = 0;
                     50:                        if (strcmp(flagstr, "FNM_NOESCAPE") == 0)
                     51:                                flags |= FNM_NOESCAPE;
                     52:                        else if (strcmp(flagstr, "FNM_PATHNAME") == 0)
                     53:                                flags |= FNM_PATHNAME;
                     54:                        else if (strcmp(flagstr, "FNM_PERIOD") == 0)
                     55:                                flags |= FNM_PERIOD;
                     56:                        else if (strcmp(flagstr, "FNM_LEADING_DIR") == 0)
                     57:                                flags |= FNM_LEADING_DIR;
                     58:                        else if (strcmp(flagstr, "FNM_CASEFOLD") == 0)
                     59:                                flags |= FNM_CASEFOLD;
                     60:                        got = fnmatch(pattern, string, flags);
                     61:                        if (got != want) {
                     62:                                fprintf(stderr,
                     63:                                    "fnmatch: %s %s %d: want %d, got %d\n",
                     64:                                    pattern, string, flags, want, got);
                     65:                                errors++;
                     66:                        }
                     67:                        tests++;
                     68:                }
                     69:        }
                     70:        if (tests != 0) {
                     71:                printf("fnmatch: %d test%s run, %d errors, %d%% success rate\n",
                     72:                    tests, tests == 1 ? "" : "s", errors,
                     73:                    (tests - errors) * 100 / tests);
                     74:        }
                     75:        exit(errors);
                     76: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>