]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
string-util: introduce string_replace_char()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 19 Apr 2022 16:58:28 +0000 (01:58 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 19 Apr 2022 17:14:35 +0000 (02:14 +0900)
src/basic/string-util.c
src/basic/string-util.h
src/test/test-string-util.c

index 6ceaeaf9df1a2bbc952f1056f5dd357cf8cd35e7..71ce921288fe9036eacc070d68de3daf0a56e906 100644 (file)
@@ -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;
+}
index ffb69e69cc48a1973f526f086eabb90294d25736..b871224f7b683a8f13ab1ba20a4a2b975fa7c2bd 100644 (file)
@@ -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);
index 93b674baabfee24b227457816cd9f6af14f15074..63bb74ac1062fa349eb8bd06f0f7b584b0d26a7f 100644 (file)
@@ -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));