diff --git a/src/string.c b/src/string.c
index 7d29603..afeec59 100644
--- a/src/string.c
+++ b/src/string.c
@@ -16,6 +16,7 @@
* along with this program. If not, see .
*/
+#include
#include
#include "string.h"
@@ -50,3 +51,25 @@ char* strnstr(const char* haystack, const char* needle, size_t s)
return NULL;
}
+
+char* strrepl(char* source, char* find, char* repl)
+{
+ size_t repl_len = strlen(repl);
+ char* result = NULL;
+ char* n;
+ char* needle = source;
+
+ do
+ {
+ n = strstr(find);
+ if (!n) break;
+ result = realloc(result, n - source + repl_len + 1);
+ result[n - source + repl_len] = '\0';
+ // Copy initial string up to here
+ strncpy(result, find, n - source - 1);
+
+ } while (n);
+
+ // Return source string if no replacements
+ return result ? result : source;
+}
diff --git a/src/string.h b/src/string.h
index 4b7de8a..87993f3 100644
--- a/src/string.h
+++ b/src/string.h
@@ -23,5 +23,6 @@
int streql(char* cmp1, char* cmp2);
int strneql(char* cmp1, char* cmp2, size_t cmp1_n);
char* strnstr(const char* haystack, const char* needle, size_t s);
+char* strrepl(char* source, char* find, char* replace);
#endif // TREE_STRING_H
diff --git a/test/unit/main.c b/test/unit/main.c
index 4349159..ace6823 100644
--- a/test/unit/main.c
+++ b/test/unit/main.c
@@ -22,11 +22,12 @@
// Imports
#include "mime_multipart.c"
-
+#include "string_test.c"
int main()
{
struct test tests[] = {
- { "Mime multipart parser", mime_multipart_test }
+ { "Mime multipart parser", mime_multipart_test },
+ { "Strings", string_replace_test }
};
return iterate_tests(tests, sizeof(tests)/sizeof(tests[0]));
}
diff --git a/test/unit/string_test.c b/test/unit/string_test.c
new file mode 100644
index 0000000..2f570ec
--- /dev/null
+++ b/test/unit/string_test.c
@@ -0,0 +1,6 @@
+
+int string_replace_test(void)
+{
+ strrepl
+ return 0;
+}