Lines Matching defs:pat

188 static bool __match_charclass(const char *pat, char c, const char **npat)
192 if (*pat == '!') {
194 pat++;
196 if (*pat++ == c) /* First character is special */
199 while (*pat && *pat != ']') { /* Matching */
200 if (*pat == '-' && *(pat + 1) != ']') { /* Range */
201 if (*(pat - 1) <= c && c <= *(pat + 1))
203 if (*(pat - 1) > *(pat + 1))
205 pat += 2;
206 } else if (*pat++ == c)
209 if (!*pat)
214 while (*pat && *pat != ']') /* Searching closing */
215 pat++;
216 if (!*pat)
218 *npat = pat + 1;
226 static bool __match_glob(const char *str, const char *pat, bool ignore_space)
228 while (*str && *pat && *pat != '*') {
235 if (isspace(*pat)) {
236 pat++;
240 if (*pat == '?') { /* Matches any single character */
242 pat++;
244 } else if (*pat == '[') /* Character classes/Ranges */
245 if (__match_charclass(pat + 1, *str, &pat)) {
250 else if (*pat == '\\') /* Escaped char match as normal char */
251 pat++;
252 if (*str++ != *pat++)
256 if (*pat == '*') {
257 while (*pat == '*')
258 pat++;
259 if (!*pat) /* Tail wild card matches all */
262 if (__match_glob(str++, pat, ignore_space))
265 return !*str && !*pat;
271 * @pat: the pattern string to match
273 * This returns true if the @str matches @pat. @pat can includes wildcards
278 * Note: if @pat syntax is broken, this always returns false.
280 bool strglobmatch(const char *str, const char *pat)
282 return __match_glob(str, pat, false);
288 * @pat: the pattern string to match
293 bool strlazymatch(const char *str, const char *pat)
295 return __match_glob(str, pat, true);