Lines Matching refs:pat

73 static bool __match_charclass(const char *pat, char c, const char **npat)
77 if (*pat == '!') {
79 pat++;
81 if (*pat++ == c) /* First character is special */
84 while (*pat && *pat != ']') { /* Matching */
85 if (*pat == '-' && *(pat + 1) != ']') { /* Range */
86 if (*(pat - 1) <= c && c <= *(pat + 1))
88 if (*(pat - 1) > *(pat + 1))
90 pat += 2;
91 } else if (*pat++ == c)
94 if (!*pat)
99 while (*pat && *pat != ']') /* Searching closing */
100 pat++;
101 if (!*pat)
103 *npat = pat + 1;
111 static bool __match_glob(const char *str, const char *pat, bool ignore_space,
114 while (*str && *pat && *pat != '*') {
121 if (isspace(*pat)) {
122 pat++;
126 if (*pat == '?') { /* Matches any single character */
128 pat++;
130 } else if (*pat == '[') /* Character classes/Ranges */
131 if (__match_charclass(pat + 1, *str, &pat)) {
136 else if (*pat == '\\') /* Escaped char match as normal char */
137 pat++;
139 if (tolower(*str) != tolower(*pat))
141 } else if (*str != *pat)
144 pat++;
147 if (*pat == '*') {
148 while (*pat == '*')
149 pat++;
150 if (!*pat) /* Tail wild card matches all */
153 if (__match_glob(str++, pat, ignore_space, case_ins))
156 return !*str && !*pat;
162 * @pat: the pattern string to match
164 * This returns true if the @str matches @pat. @pat can includes wildcards
169 * Note: if @pat syntax is broken, this always returns false.
171 bool strglobmatch(const char *str, const char *pat)
173 return __match_glob(str, pat, false, false);
176 bool strglobmatch_nocase(const char *str, const char *pat)
178 return __match_glob(str, pat, false, true);
184 * @pat: the pattern string to match
189 bool strlazymatch(const char *str, const char *pat)
191 return __match_glob(str, pat, true, false);