diff --git a/src/util/FFstrbuf.c b/src/util/FFstrbuf.c index 94f436d51..bcf946071 100644 --- a/src/util/FFstrbuf.c +++ b/src/util/FFstrbuf.c @@ -3,7 +3,7 @@ #include #include -static char* CHAR_NULL_PTR = ""; +char* CHAR_NULL_PTR = ""; void ffStrbufInitA(FFstrbuf* strbuf, uint32_t allocate) { @@ -22,6 +22,19 @@ void ffStrbufInitCopy(FFstrbuf* strbuf, const FFstrbuf* src) ffStrbufAppend(strbuf, src); } +void ffStrbufInitMove(FFstrbuf* strbuf, FFstrbuf* src) +{ + if (src) + { + strbuf->allocated = src->allocated; + strbuf->chars = src->chars; + strbuf->length = src->length; + ffStrbufInit(src); + } + else + ffStrbufInit(strbuf); +} + void ffStrbufInitF(FFstrbuf* strbuf, const char* format, ...) { assert(format != NULL); diff --git a/src/util/FFstrbuf.h b/src/util/FFstrbuf.h index 7755225a7..e2ef2586a 100644 --- a/src/util/FFstrbuf.h +++ b/src/util/FFstrbuf.h @@ -31,6 +31,7 @@ typedef struct FFstrbuf void ffStrbufInitA(FFstrbuf* strbuf, uint32_t allocate); void ffStrbufInitCopy(FFstrbuf* strbuf, const FFstrbuf* src); +void ffStrbufInitMove(FFstrbuf* strbuf, FFstrbuf* src); void ffStrbufInitF(FFstrbuf* strbuf, const char* format, ...); void ffStrbufInitVF(FFstrbuf* strbuf, const char* format, va_list arguments); @@ -115,7 +116,10 @@ static inline void ffStrbufSetS(FFstrbuf* strbuf, const char* value) static inline void ffStrbufInit(FFstrbuf* strbuf) { - ffStrbufInitA(strbuf, 0); + extern char* CHAR_NULL_PTR; + strbuf->allocated = 0; + strbuf->length = 0; + strbuf->chars = CHAR_NULL_PTR; } static inline void ffStrbufInitNS(FFstrbuf* strbuf, uint32_t length, const char* str)