From 0ce5d4e0788b4a6c1764776b87c4f1b4e7f63f15 Mon Sep 17 00:00:00 2001 From: Alison Watson Date: Wed, 4 Dec 2019 05:54:07 -0500 Subject: [PATCH] add Hunk_Memdup --- source/zone.c | 12 ++++++++---- source/zone.h | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) 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);