diff options
Diffstat (limited to 'tools/perf/util/string.c')
| -rw-r--r-- | tools/perf/util/string.c | 55 |
1 files changed, 42 insertions, 13 deletions
diff --git a/tools/perf/util/string.c b/tools/perf/util/string.c index c397d4f6f748..a175949ed216 100644 --- a/tools/perf/util/string.c +++ b/tools/perf/util/string.c | |||
| @@ -265,21 +265,21 @@ error: | |||
| 265 | return false; | 265 | return false; |
| 266 | } | 266 | } |
| 267 | 267 | ||
| 268 | /** | 268 | /* Glob/lazy pattern matching */ |
| 269 | * strglobmatch - glob expression pattern matching | 269 | static bool __match_glob(const char *str, const char *pat, bool ignore_space) |
| 270 | * @str: the target string to match | ||
| 271 | * @pat: the pattern string to match | ||
| 272 | * | ||
| 273 | * This returns true if the @str matches @pat. @pat can includes wildcards | ||
| 274 | * ('*','?') and character classes ([CHARS], complementation and ranges are | ||
| 275 | * also supported). Also, this supports escape character ('\') to use special | ||
| 276 | * characters as normal character. | ||
| 277 | * | ||
| 278 | * Note: if @pat syntax is broken, this always returns false. | ||
| 279 | */ | ||
| 280 | bool strglobmatch(const char *str, const char *pat) | ||
| 281 | { | 270 | { |
| 282 | while (*str && *pat && *pat != '*') { | 271 | while (*str && *pat && *pat != '*') { |
| 272 | if (ignore_space) { | ||
| 273 | /* Ignore spaces for lazy matching */ | ||
| 274 | if (isspace(*str)) { | ||
| 275 | str++; | ||
| 276 | continue; | ||
| 277 | } | ||
| 278 | if (isspace(*pat)) { | ||
| 279 | pat++; | ||
| 280 | continue; | ||
| 281 | } | ||
| 282 | } | ||
| 283 | if (*pat == '?') { /* Matches any single character */ | 283 | if (*pat == '?') { /* Matches any single character */ |
| 284 | str++; | 284 | str++; |
| 285 | pat++; | 285 | pat++; |
| @@ -308,3 +308,32 @@ bool strglobmatch(const char *str, const char *pat) | |||
| 308 | return !*str && !*pat; | 308 | return !*str && !*pat; |
| 309 | } | 309 | } |
| 310 | 310 | ||
| 311 | /** | ||
| 312 | * strglobmatch - glob expression pattern matching | ||
| 313 | * @str: the target string to match | ||
| 314 | * @pat: the pattern string to match | ||
| 315 | * | ||
| 316 | * This returns true if the @str matches @pat. @pat can includes wildcards | ||
| 317 | * ('*','?') and character classes ([CHARS], complementation and ranges are | ||
| 318 | * also supported). Also, this supports escape character ('\') to use special | ||
| 319 | * characters as normal character. | ||
| 320 | * | ||
| 321 | * Note: if @pat syntax is broken, this always returns false. | ||
| 322 | */ | ||
| 323 | bool strglobmatch(const char *str, const char *pat) | ||
| 324 | { | ||
| 325 | return __match_glob(str, pat, false); | ||
| 326 | } | ||
| 327 | |||
| 328 | /** | ||
| 329 | * strlazymatch - matching pattern strings lazily with glob pattern | ||
| 330 | * @str: the target string to match | ||
| 331 | * @pat: the pattern string to match | ||
| 332 | * | ||
| 333 | * This is similar to strglobmatch, except this ignores spaces in | ||
| 334 | * the target string. | ||
| 335 | */ | ||
| 336 | bool strlazymatch(const char *str, const char *pat) | ||
| 337 | { | ||
| 338 | return __match_glob(str, pat, true); | ||
| 339 | } | ||
