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:
parent
072f5f9b18
commit
146f4482b2
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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));
|
||||
|
Loading…
x
Reference in New Issue
Block a user