summaryrefslogtreecommitdiffstats
path: root/XUtils.c
diff options
context:
space:
mode:
authorDaniel Lange <DLange@git.local>2022-03-25 16:24:24 +0100
committerDaniel Lange <DLange@git.local>2022-03-25 17:19:59 +0100
commit7c43e02591de9b6e14744e3eaffed25ad092756e (patch)
tree31434fb6a9d4f658c1812d9298a4424cab34ffb9 /XUtils.c
parenta2ca7583a9ba2e57eb9e9316aad52c9248aae092 (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.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/XUtils.c b/XUtils.c
index 827fa950..b34a8a73 100644
--- a/XUtils.c
+++ b/XUtils.c
@@ -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) {

© 2014-2024 Faster IT GmbH | imprint | privacy policy