diff --git a/renderdoc/api/replay/basic_types.h b/renderdoc/api/replay/basic_types.h index 63e8d4146..10ce23517 100644 --- a/renderdoc/api/replay/basic_types.h +++ b/renderdoc/api/replay/basic_types.h @@ -226,6 +226,24 @@ struct str : public rdctype::array return *this; } + void assign(const char *const in, int32_t inCount) + { + Delete(); + count = inCount; + if(inCount == 0) + { + elems = (char *)allocate(sizeof(char)); + elems[0] = 0; + } + else + { + elems = (char *)allocate(sizeof(char) * (inCount + 1)); + if(in) + memcpy(elems, in, sizeof(char) * inCount); + elems[count] = 0; + } + } + operator const char *() const { return elems ? elems : ""; } const char *c_str() const { return elems ? elems : ""; } }; diff --git a/renderdoc/serialise/serialiser.h b/renderdoc/serialise/serialiser.h index 1f43f813b..541a8dd3e 100644 --- a/renderdoc/serialise/serialiser.h +++ b/renderdoc/serialise/serialiser.h @@ -506,10 +506,9 @@ public: } else { - create_array_uninit(el, sz + 1); + el.assign(NULL, sz); for(int32_t i = 0; i < sz; i++) Serialise("", el.elems[i]); - el.elems[sz] = 0; } }