diff options
Diffstat (limited to 'system')
-rw-r--r-- | system/lib/libc/musl/src/string/strdup.c | 13 | ||||
-rw-r--r-- | system/lib/libc/musl/src/string/strndup.c | 12 | ||||
-rw-r--r-- | system/lib/libcextra.symbols | 2 |
3 files changed, 27 insertions, 0 deletions
diff --git a/system/lib/libc/musl/src/string/strdup.c b/system/lib/libc/musl/src/string/strdup.c new file mode 100644 index 00000000..dd5f80c1 --- /dev/null +++ b/system/lib/libc/musl/src/string/strdup.c @@ -0,0 +1,13 @@ +#include <stdlib.h> +#include <string.h> +#include "libc.h" + +char *__strdup(const char *s) +{ + size_t l = strlen(s); + char *d = malloc(l+1); + if (!d) return NULL; + return memcpy(d, s, l+1); +} + +weak_alias(__strdup, strdup); diff --git a/system/lib/libc/musl/src/string/strndup.c b/system/lib/libc/musl/src/string/strndup.c new file mode 100644 index 00000000..617d27ba --- /dev/null +++ b/system/lib/libc/musl/src/string/strndup.c @@ -0,0 +1,12 @@ +#include <stdlib.h> +#include <string.h> + +char *strndup(const char *s, size_t n) +{ + size_t l = strnlen(s, n); + char *d = malloc(l+1); + if (!d) return NULL; + memcpy(d, s, l); + d[l] = 0; + return d; +} diff --git a/system/lib/libcextra.symbols b/system/lib/libcextra.symbols index dedfcedd..06e68c92 100644 --- a/system/lib/libcextra.symbols +++ b/system/lib/libcextra.symbols @@ -117,12 +117,14 @@ W strchrnul T strchr T strcspn + T strdup T strfmon T strfmon_l T strlcat T strlcpy T strncasecmp_l T strncat + T strndup T strnlen T strrchr T strsep |