diff --git a/common/include/common/stringutils.h b/common/include/common/stringutils.h index f16ff50d..b9aa0af8 100644 --- a/common/include/common/stringutils.h +++ b/common/include/common/stringutils.h @@ -34,4 +34,7 @@ int alloc_sprintf(char ** str, const char * format, ...) // Find value in a list separated by delimiter. bool str_containsValue(const char * list, char delimiter, const char * value); +// Local implementation of strdup +char * strdup(const char *s); + #endif diff --git a/common/src/stringutils.c b/common/src/stringutils.c index a724e0c4..b66a91ec 100644 --- a/common/src/stringutils.c +++ b/common/src/stringutils.c @@ -23,6 +23,7 @@ #include #include #include +#include #include "common/stringutils.h" @@ -89,3 +90,23 @@ bool str_containsValue(const char * list, char delimiter, const char * value) } return false; } + +char * strdup(const char *s) +{ + if (!s) + { + errno = EINVAL; + return NULL; + } + + const ssize_t len = strlen(s) + 1; + char * out = malloc(len); + if (!out) + { + errno = ENOMEM; + return NULL; + } + + memcpy(out, s, len); + return out; +}