diff --git a/include/private/vkd3d_string.h b/include/private/vkd3d_string.h index c64245c8..d46a7704 100644 --- a/include/private/vkd3d_string.h +++ b/include/private/vkd3d_string.h @@ -32,6 +32,7 @@ bool vkd3d_export_strequal(const WCHAR *a, const WCHAR *b); bool vkd3d_export_strequal_substr(const WCHAR *a, size_t n, const WCHAR *b); char *vkd3d_strdup(const char *str); +char *vkd3d_strdup_n(const char *str, size_t n); WCHAR *vkd3d_wstrdup(const WCHAR *str); WCHAR *vkd3d_wstrdup_n(const WCHAR *str, size_t n); diff --git a/libs/vkd3d-common/string.c b/libs/vkd3d-common/string.c index 77ffa219..de365a30 100644 --- a/libs/vkd3d-common/string.c +++ b/libs/vkd3d-common/string.c @@ -37,6 +37,23 @@ char *vkd3d_strdup(const char *str) return duped; } +char *vkd3d_strdup_n(const char *str, size_t n) +{ + char *duped; + size_t len; + + len = strnlen(str, n); + + duped = vkd3d_malloc(len + 1); + if (duped) + { + memcpy(duped, str, len); + duped[len] = '\0'; + } + + return duped; +} + WCHAR *vkd3d_wstrdup(const WCHAR *str) { WCHAR *duped;