/* 7zBuf2.c -- Byte Buffer 2017-04-03 : Igor Pavlov : Public domain */ #include "Precomp.h" #include #include "7zBuf.h" void DynBuf_Construct(CDynBuf *p) { p->data = 0; p->size = 0; p->pos = 0; } void DynBuf_SeekToBeg(CDynBuf *p) { p->pos = 0; } int DynBuf_Write(CDynBuf *p, const Byte *buf, size_t size, ISzAllocPtr alloc) { if (size > p->size - p->pos) { size_t newSize = p->pos + size; Byte *data; newSize += newSize / 4; data = (Byte *)ISzAlloc_Alloc(alloc, newSize); if (!data) return 0; p->size = newSize; if (p->pos != 0) memcpy(data, p->data, p->pos); ISzAlloc_Free(alloc, p->data); p->data = data; } if (size != 0) { memcpy(p->data + p->pos, buf, size); p->pos += size; } return 1; } void DynBuf_Free(CDynBuf *p, ISzAllocPtr alloc) { ISzAlloc_Free(alloc, p->data); p->data = 0; p->size = 0; p->pos = 0; }