1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-19 22:50:17 +03:00

string-util: introduce strspn_from_end()

This commit is contained in:
Yu Watanabe 2022-04-20 02:15:01 +09:00
parent 072f5f9b18
commit 146f4482b2
3 changed files with 29 additions and 0 deletions

View File

@ -1174,3 +1174,18 @@ char *string_replace_char(char *str, char old_char, char new_char) {
return str;
}
size_t strspn_from_end(const char *str, const char *accept) {
size_t n = 0;
if (isempty(str))
return 0;
if (isempty(accept))
return 0;
for (const char *p = str + strlen(str); p > str && strchr(accept, p[-1]); p--)
n++;
return n;
}

View File

@ -235,3 +235,5 @@ static inline int string_contains_word(const char *string, const char *separator
bool streq_skip_trailing_chars(const char *s1, const char *s2, const char *ok);
char *string_replace_char(char *str, char old_char, char new_char);
size_t strspn_from_end(const char *str, const char *accept);

View File

@ -943,6 +943,18 @@ TEST(string_replace_char) {
assert_se(streq(string_replace_char(strdupa("aaaa"), 'a', '\t'), "\t\t\t\t"));
}
TEST(strspn_from_end) {
assert_se(strspn_from_end(NULL, NULL) == 0);
assert_se(strspn_from_end("hoge", NULL) == 0);
assert_se(strspn_from_end(NULL, DIGITS) == 0);
assert_se(strspn_from_end("", DIGITS) == 0);
assert_se(strspn_from_end("hoge", DIGITS) == 0);
assert_se(strspn_from_end("1234", DIGITS) == 4);
assert_se(strspn_from_end("aaa1234", DIGITS) == 4);
assert_se(strspn_from_end("aaa1234aaa", DIGITS) == 0);
assert_se(strspn_from_end("aaa12aa34", DIGITS) == 2);
}
TEST(streq_skip_trailing_chars) {
/* NULL is WHITESPACE by default*/
assert_se(streq_skip_trailing_chars("foo bar", "foo bar", NULL));