From: Yu Watanabe Date: Tue, 19 Apr 2022 16:58:28 +0000 (+0900) Subject: string-util: introduce string_replace_char() X-Git-Tag: v251-rc2~95^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=072f5f9b18850ece1d14ff2e5d75a792821bfdd4;p=thirdparty%2Fsystemd.git string-util: introduce string_replace_char() --- diff --git a/src/basic/string-util.c b/src/basic/string-util.c index 6ceaeaf9df1..71ce921288f 100644 --- a/src/basic/string-util.c +++ b/src/basic/string-util.c @@ -1162,3 +1162,15 @@ bool streq_skip_trailing_chars(const char *s1, const char *s2, const char *ok) { return in_charset(s1, ok) && in_charset(s2, ok); } + +char *string_replace_char(char *str, char old_char, char new_char) { + assert(str); + assert(old_char != '\0'); + assert(new_char != '\0'); + assert(old_char != new_char); + + for (char *p = strchr(str, old_char); p; p = strchr(p + 1, old_char)) + *p = new_char; + + return str; +} diff --git a/src/basic/string-util.h b/src/basic/string-util.h index ffb69e69cc4..b871224f7b6 100644 --- a/src/basic/string-util.h +++ b/src/basic/string-util.h @@ -233,3 +233,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); diff --git a/src/test/test-string-util.c b/src/test/test-string-util.c index 93b674baabf..63bb74ac106 100644 --- a/src/test/test-string-util.c +++ b/src/test/test-string-util.c @@ -935,6 +935,14 @@ TEST(strextendf) { assert_se(streq(p, "<77>,<99>,< 88>,<00001234>")); } +TEST(string_replace_char) { + assert_se(streq(string_replace_char(strdupa(""), 'a', 'b'), "")); + assert_se(streq(string_replace_char(strdupa("abc"), 'a', 'b'), "bbc")); + assert_se(streq(string_replace_char(strdupa("hoge"), 'a', 'b'), "hoge")); + assert_se(streq(string_replace_char(strdupa("aaaa"), 'a', 'b'), "bbbb")); + assert_se(streq(string_replace_char(strdupa("aaaa"), 'a', '\t'), "\t\t\t\t")); +} + TEST(streq_skip_trailing_chars) { /* NULL is WHITESPACE by default*/ assert_se(streq_skip_trailing_chars("foo bar", "foo bar", NULL));