string-util: add strstrafter()

strstrafter() is like strstr() but returns a pointer to the first
character *after* the found substring, not on the substring itself.
Quite often this is what we actually want.

Inspired by #27267 I think it makes sense to add a helper for this,
to avoid the potentially fragile manual pointer increment afterwards.
This commit is contained in:
Lennart Poettering
2023-04-14 16:56:15 +02:00
parent bb7b1da8fe
commit d791013ff5
7 changed files with 42 additions and 16 deletions
+17
View File
@@ -1247,4 +1247,21 @@ TEST(find_line_startswith) {
assert_se(!find_line_startswith(emptystring, "x"));
}
TEST(strstrafter) {
static const char buffer[] = "abcdefghijklmnopqrstuvwxyz";
assert_se(!strstrafter(NULL, NULL));
assert_se(!strstrafter("", NULL));
assert_se(!strstrafter(NULL, ""));
assert_se(streq_ptr(strstrafter("", ""), ""));
assert_se(strstrafter(buffer, "a") == buffer + 1);
assert_se(strstrafter(buffer, "") == buffer);
assert_se(strstrafter(buffer, "ab") == buffer + 2);
assert_se(strstrafter(buffer, "cde") == buffer + 5);
assert_se(strstrafter(buffer, "xyz") == strchr(buffer, 0));
assert_se(strstrafter(buffer, buffer) == strchr(buffer, 0));
assert_se(!strstrafter(buffer, "-"));
}
DEFINE_TEST_MAIN(LOG_DEBUG);