diff --git a/all.h b/all.h index 99609d9..d126b95 100644 --- a/all.h +++ b/all.h @@ -776,6 +776,7 @@ typedef struct StringArena { fn StringChunkList allocStringChunkList(StringArena* a, String string); fn void releaseStringChunkList(StringArena* a, StringChunkList* list); fn String stringChunkToString(Arena* a, StringChunkList list); +fn String stringChunkToStringWithPadding(Arena* a, StringChunkList list, u32 extra); fn void stringChunkListAppend(StringArena* a, StringChunkList* list, String string); fn void stringChunkListDeleteLast(StringArena* a, StringChunkList* list); fn StringChunkList stringChunkListInit(StringArena* a); diff --git a/string_chunk.c b/string_chunk.c index 7ebd38c..5dcfe04 100644 --- a/string_chunk.c +++ b/string_chunk.c @@ -40,10 +40,15 @@ fn void releaseStringChunkList(StringArena* a, StringChunkList* list) { } fn String stringChunkToString(Arena* a, StringChunkList list) { + return stringChunkToStringWithPadding(a, list, 0); +} + +fn String stringChunkToStringWithPadding(Arena* a, StringChunkList list, u32 extra) { + u32 cap = list.total_size + 1 + extra; String result = { .length = list.total_size, - .capacity = list.total_size + 1, - .bytes = arenaAllocArray(a, u8, list.total_size+1), + .capacity = cap, + .bytes = arenaAllocArray(a, u8, cap), }; MemoryZero(result.bytes, result.capacity); // copy the string bytes out of the StringChunkList into the correctly-sized String