diff options
-rw-r--r-- | src/library.js | 27 | ||||
-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 | ||||
-rw-r--r-- | tools/system_libs.py | 2 |
5 files changed, 29 insertions, 27 deletions
diff --git a/src/library.js b/src/library.js index 601a5c06..6f8fba5e 100644 --- a/src/library.js +++ b/src/library.js @@ -3639,33 +3639,6 @@ LibraryManager.library = { return pdest|0; }, - strdup__deps: ['strlen', 'malloc'], - strdup: function(ptr) { - var len = _strlen(ptr); - var newStr = _malloc(len + 1); - {{{ makeCopyValues('newStr', 'ptr', 'len', 'null', null, 1) }}}; - {{{ makeSetValue('newStr', 'len', '0', 'i8') }}}; - return newStr; - }, - - strndup__deps: ['strdup', 'strlen', 'malloc'], - strndup: function(ptr, size) { - var len = _strlen(ptr); - - if (size >= len) { - return _strdup(ptr); - } - - if (size < 0) { - size = 0; - } - - var newStr = _malloc(size + 1); - {{{ makeCopyValues('newStr', 'ptr', 'size', 'null', null, 1) }}}; - {{{ makeSetValue('newStr', 'size', '0', 'i8') }}}; - return newStr; - }, - strpbrk: function(ptr1, ptr2) { var curr; var searchSet = {}; 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 diff --git a/tools/system_libs.py b/tools/system_libs.py index f61e2f79..527c573a 100644 --- a/tools/system_libs.py +++ b/tools/system_libs.py @@ -248,9 +248,11 @@ def calculate(temp_files, in_temp, stdout, stderr): 'strchr.c', 'strchrnul.c', 'strcspn.c', + 'strdup.c', 'strlcat.c', 'strlcpy.c', 'strncat.c', + 'strndup.c', 'strnlen.c', 'strrchr.c', 'strsep.c', |