[common] all: implement strdup directly

Dr.Memory on Windows complains bitterly about invalid heap free as
it doesn't seem to be able to track this function's allocations. As
it's such a trivial function we can just implement it locally.
This commit is contained in:
Geoffrey McRae 2023-10-22 02:25:25 +11:00
parent 12d051d8c0
commit 3ed71a09f4
2 changed files with 24 additions and 0 deletions

View File

@ -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

View File

@ -23,6 +23,7 @@
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <errno.h>
#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;
}