diff options
author | Daniel Lange <DLange@git.local> | 2022-03-25 16:24:24 +0100 |
---|---|---|
committer | Daniel Lange <DLange@git.local> | 2022-03-25 17:19:59 +0100 |
commit | 7c43e02591de9b6e14744e3eaffed25ad092756e (patch) | |
tree | 31434fb6a9d4f658c1812d9298a4424cab34ffb9 /XUtils.c | |
parent | a2ca7583a9ba2e57eb9e9316aad52c9248aae092 (diff) |
Improve String_contains_i to allow for multiple terms
This enables:
* Multiple filters in the main panel and strace etc. views
* Multiple search terms
The search terms are separated by "|" and are still fixed strings
matched case-insensitive.
Added a multi flag at request of BenBE.
Diffstat (limited to 'XUtils.c')
-rw-r--r-- | XUtils.c | 18 |
1 files changed, 16 insertions, 2 deletions
@@ -94,8 +94,22 @@ void* xReallocArrayZero(void* ptr, size_t prevmemb, size_t newmemb, size_t size) return ret; } -inline bool String_contains_i(const char* s1, const char* s2) { - return strcasestr(s1, s2) != NULL; +inline bool String_contains_i(const char* s1, const char* s2, bool multi) { + // we have a multi-string search term, handle as special case for performance reasons + if (multi && strstr(s2, "|")) { + size_t nNeedles; + char** needles = String_split(s2, '|', &nNeedles); + for (size_t i = 0; i < nNeedles; i++) { + if (strcasestr(s1, needles[i]) != NULL) { + String_freeArray(needles); + return true; + } + } + String_freeArray(needles); + return false; + } else { + return strcasestr(s1, s2) != NULL; + } } char* String_cat(const char* s1, const char* s2) { |