Lines Matching defs:pat

72 static bool __match_charclass(const char *pat, char c, const char **npat)
76 if (*pat == '!') {
78 pat++;
80 if (*pat++ == c) /* First character is special */
83 while (*pat && *pat != ']') { /* Matching */
84 if (*pat == '-' && *(pat + 1) != ']') { /* Range */
85 if (*(pat - 1) <= c && c <= *(pat + 1))
87 if (*(pat - 1) > *(pat + 1))
89 pat += 2;
90 } else if (*pat++ == c)
93 if (!*pat)
98 while (*pat && *pat != ']') /* Searching closing */
99 pat++;
100 if (!*pat)
102 *npat = pat + 1;
110 static bool __match_glob(const char *str, const char *pat, bool ignore_space,
113 while (*str && *pat && *pat != '*') {
120 if (isspace(*pat)) {
121 pat++;
125 if (*pat == '?') { /* Matches any single character */
127 pat++;
129 } else if (*pat == '[') /* Character classes/Ranges */
130 if (__match_charclass(pat + 1, *str, &pat)) {
135 else if (*pat == '\\') /* Escaped char match as normal char */
136 pat++;
138 if (tolower(*str) != tolower(*pat))
140 } else if (*str != *pat)
143 pat++;
146 if (*pat == '*') {
147 while (*pat == '*')
148 pat++;
149 if (!*pat) /* Tail wild card matches all */
152 if (__match_glob(str++, pat, ignore_space, case_ins))
155 return !*str && !*pat;
161 * @pat: the pattern string to match
163 * This returns true if the @str matches @pat. @pat can includes wildcards
168 * Note: if @pat syntax is broken, this always returns false.
170 bool strglobmatch(const char *str, const char *pat)
172 return __match_glob(str, pat, false, false);
175 bool strglobmatch_nocase(const char *str, const char *pat)
177 return __match_glob(str, pat, false, true);
183 * @pat: the pattern string to match
188 bool strlazymatch(const char *str, const char *pat)
190 return __match_glob(str, pat, true, false);