basic: add string_contains_word()

This wraps the common pattern of using extract_first_word() in a loop
to look for a matching word.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2020-09-04 12:59:25 +02:00
parent 0176728a73
commit 53cd7f3374
3 changed files with 75 additions and 0 deletions
+20
View File
@@ -8,6 +8,7 @@
#include "alloc-util.h"
#include "escape.h"
#include "extract-word.h"
#include "fileio.h"
#include "gunicode.h"
#include "locale-util.h"
@@ -1207,3 +1208,22 @@ int string_extract_line(const char *s, size_t i, char **ret) {
c++;
}
}
int string_contains_word(const char *string, const char *separators, const char *word) {
/* In the default mode with no separators specified, we split on whitespace and
* don't coalesce separators. */
const ExtractFlags flags = separators ? EXTRACT_DONT_COALESCE_SEPARATORS : 0;
for (const char *p = string;;) {
_cleanup_free_ char *w = NULL;
int r;
r = extract_first_word(&p, &w, separators, flags);
if (r < 0)
return r;
if (r == 0)
return false;
if (streq(w, word))
return true;
}
}