aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compat/compat.c4
-rw-r--r--compat/compat.h15
-rw-r--r--src/string.c4
-rw-r--r--tests/ds/hashmap_tests.c4
-rw-r--r--tests/string_tests.c2
5 files changed, 17 insertions, 12 deletions
diff --git a/compat/compat.c b/compat/compat.c
index 37432bf..4d8526c 100644
--- a/compat/compat.c
+++ b/compat/compat.c
@@ -3,7 +3,7 @@
#ifdef NO_STRDUP
#include <stdlib.h>
#include <string.h>
-char *strdup(const char *s) {
+char *mos_strdup(const char *s) {
char *s2 = malloc(strlen(s) + 1);
if (!s2)
return NULL;
@@ -13,7 +13,7 @@ char *strdup(const char *s) {
#endif // NO_STRDUP
#ifdef NO_MEMMEM
-void *memmem(const void *h, size_t h_size, const void *n, size_t n_size) {
+void *mos_memmem(const void *h, size_t h_size, const void *n, size_t n_size) {
if (n_size == 0)
return (void *)h;
if (n_size > h_size)
diff --git a/compat/compat.h b/compat/compat.h
index 3e46993..5f9424d 100644
--- a/compat/compat.h
+++ b/compat/compat.h
@@ -6,15 +6,20 @@
#define _GNU_SOURCE
-typedef void declaration;
+// In C99 TU needs a declaration (which won't be the case if all functions are available)
+typedef void mos_compat_decl;
-#ifdef NO_STRDUP
-extern char *strdup(const char *s);
+#ifndef NO_STRDUP
+#define mos_strdup strdup
+#else
+extern char *mos_strdup(const char *s);
#endif // NO_STRDUP
-#ifdef NO_MEMMEM
+#ifndef NO_MEMMEM
+#define mos_memmem memmem
+#else
#include <stddef.h>
-extern void *memmem(const void *h, size_t h_size, const void *n, size_t n_size);
+extern void *mos_memmem(const void *h, size_t h_size, const void *n, size_t n_size);
#endif // NO_MEMMEM
#endif // MOSLIB_COMPAT_H
diff --git a/src/string.c b/src/string.c
index db3bf77..20c1a1c 100644
--- a/src/string.c
+++ b/src/string.c
@@ -152,7 +152,7 @@ MosStringSlice mos_ss_split_ss(MosStringSlice *ss, MosStringSlice delim) {
if (delim.len == 0)
return MOS_SS_LIT("");
- const char *found = memmem(ss->data, ss->len, delim.data, delim.len);
+ const char *found = mos_memmem(ss->data, ss->len, delim.data, delim.len);
if (!found) {
MosStringSlice res = mos_ss_copy(*ss);
ss->len = 0;
@@ -189,7 +189,7 @@ MosStringSlice mos_ss_find(MosStringSlice ss, MosStringSlice target) {
if (target.len == 0)
return ss;
- const char *found = memmem(ss.data, ss.len, target.data, target.len);
+ const char *found = mos_memmem(ss.data, ss.len, target.data, target.len);
if (!found)
return MOS_SS_LIT("");
diff --git a/tests/ds/hashmap_tests.c b/tests/ds/hashmap_tests.c
index 72965b4..bc1a145 100644
--- a/tests/ds/hashmap_tests.c
+++ b/tests/ds/hashmap_tests.c
@@ -99,7 +99,7 @@ TEST(str_key) {
E *hm = hm_new(.key = HM_STR);
char *str = "key";
- char *str2 = strdup(str);
+ char *str2 = mos_strdup(str);
hm_put(hm, str, 69);
hm_put(hm, "hey", 420);
test_assert(hm_get(hm, str2) == 69, "hm_get got value not from hm_put");
@@ -117,7 +117,7 @@ TEST(ss_key) {
E *hm = hm_new(.key = HM_SS);
char *str = "key";
- char *str2 = strdup(str);
+ char *str2 = mos_strdup(str);
StringSlice ss = ss_from_str(str);
StringSlice ss2 = ss_from_str(str2);
hm_put(hm, ss, 69);
diff --git a/tests/string_tests.c b/tests/string_tests.c
index 282927c..f1009f9 100644
--- a/tests/string_tests.c
+++ b/tests/string_tests.c
@@ -56,7 +56,7 @@ TEST(comparing) {
test_assert(ss_eq(ss, ss), "slice is not equal to itself");
test_assert(ss_eq_str(ss, ss.data), "slice is not equal to its C string");
- char *hw = strdup("hello world");
+ char *hw = mos_strdup("hello world");
StringSlice ss2 = ss_from_str(hw);
test_assert(ss_eq(ss, ss2), "slice is not equal to an equal slice");
test_assert(ss_eq_str(ss, hw), "slice is not equal to an equal string");