You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
860 B
48 lines
860 B
/* 7zBuf2.c -- Byte Buffer |
|
2013-11-12 : Igor Pavlov : Public domain */ |
|
|
|
#include "Precomp.h" |
|
|
|
#include <string.h> |
|
|
|
#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, ISzAlloc *alloc) |
|
{ |
|
if (size > p->size - p->pos) |
|
{ |
|
size_t newSize = p->pos + size; |
|
Byte *data; |
|
newSize += newSize / 4; |
|
data = (Byte *)alloc->Alloc(alloc, newSize); |
|
if (data == 0) |
|
return 0; |
|
p->size = newSize; |
|
memcpy(data, p->data, p->pos); |
|
alloc->Free(alloc, p->data); |
|
p->data = data; |
|
} |
|
memcpy(p->data + p->pos, buf, size); |
|
p->pos += size; |
|
return 1; |
|
} |
|
|
|
void DynBuf_Free(CDynBuf *p, ISzAlloc *alloc) |
|
{ |
|
alloc->Free(alloc, p->data); |
|
p->data = 0; |
|
p->size = 0; |
|
p->pos = 0; |
|
}
|
|
|