Merge pull request #461 from negativeExponent/libchdr
[pcsx_rearmed.git] / deps / lzma-16.04 / C / 7zBuf2.c
1 /* 7zBuf2.c -- Byte Buffer\r
2 2014-08-22 : Igor Pavlov : Public domain */\r
3 \r
4 #include "Precomp.h"\r
5 \r
6 #include <string.h>\r
7 \r
8 #include "7zBuf.h"\r
9 \r
10 void DynBuf_Construct(CDynBuf *p)\r
11 {\r
12   p->data = 0;\r
13   p->size = 0;\r
14   p->pos = 0;\r
15 }\r
16 \r
17 void DynBuf_SeekToBeg(CDynBuf *p)\r
18 {\r
19   p->pos = 0;\r
20 }\r
21 \r
22 int DynBuf_Write(CDynBuf *p, const Byte *buf, size_t size, ISzAlloc *alloc)\r
23 {\r
24   if (size > p->size - p->pos)\r
25   {\r
26     size_t newSize = p->pos + size;\r
27     Byte *data;\r
28     newSize += newSize / 4;\r
29     data = (Byte *)alloc->Alloc(alloc, newSize);\r
30     if (data == 0)\r
31       return 0;\r
32     p->size = newSize;\r
33     memcpy(data, p->data, p->pos);\r
34     alloc->Free(alloc, p->data);\r
35     p->data = data;\r
36   }\r
37   if (size != 0)\r
38   {\r
39     memcpy(p->data + p->pos, buf, size);\r
40     p->pos += size;\r
41   }\r
42   return 1;\r
43 }\r
44 \r
45 void DynBuf_Free(CDynBuf *p, ISzAlloc *alloc)\r
46 {\r
47   alloc->Free(alloc, p->data);\r
48   p->data = 0;\r
49   p->size = 0;\r
50   p->pos = 0;\r
51 }\r