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.
This commit is contained in:
Daniel Lange
2022-03-25 16:24:24 +01:00
parent a2ca7583a9
commit 7c43e02591
7 changed files with 28 additions and 11 deletions

View File

@ -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) {