diff --git a/source/zone.c b/source/zone.c index 29beca8..d8760c5 100644 --- a/source/zone.c +++ b/source/zone.c @@ -579,11 +579,15 @@ void *Hunk_TempAlloc(int32_t size) return buf; } -char *Hunk_Strdup(const char *s, const char *name) +void *Hunk_Strdup(void const *s, char const *name) { - size_t sz = strlen(s) + 1; - char *ptr = (char *) Hunk_AllocName(sz, name); - memcpy(ptr, s, sz); + return Hunk_Memdup(s, strlen(s) + 1, name); +} + +void *Hunk_Memdup(void const *mem, size_t n, char const *name) +{ + void *ptr = Hunk_AllocName(n, name); + memcpy(ptr, mem, n); return ptr; } diff --git a/source/zone.h b/source/zone.h index ae214ea..8f0253e 100644 --- a/source/zone.h +++ b/source/zone.h @@ -99,7 +99,8 @@ char *Z_Strdup(const char *s); void *Hunk_Alloc(int32_t size); // returns 0 filled memory void *Hunk_AllocName(int32_t size, const char *name); void *Hunk_HighAllocName(int32_t size, const char *name); -char *Hunk_Strdup(const char *s, const char *name); +void *Hunk_Strdup(void const *s, char const *name); +void *Hunk_Memdup(void const *mem, size_t n, char const *name); int32_t Hunk_LowMark(void); void Hunk_FreeToLowMark(int32_t mark);