diff options
Diffstat (limited to 'src/libs/dutil/WixToolset.DUtil/inc/buffutil.h')
-rw-r--r-- | src/libs/dutil/WixToolset.DUtil/inc/buffutil.h | 115 |
1 files changed, 112 insertions, 3 deletions
diff --git a/src/libs/dutil/WixToolset.DUtil/inc/buffutil.h b/src/libs/dutil/WixToolset.DUtil/inc/buffutil.h index 322209e6..116b67bd 100644 --- a/src/libs/dutil/WixToolset.DUtil/inc/buffutil.h +++ b/src/libs/dutil/WixToolset.DUtil/inc/buffutil.h | |||
@@ -9,9 +9,35 @@ extern "C" { | |||
9 | 9 | ||
10 | // macro definitions | 10 | // macro definitions |
11 | 11 | ||
12 | #define ReleaseBuffer ReleaseMem | 12 | #define ReleaseBuffer(b) BuffFree(b) |
13 | #define ReleaseNullBuffer ReleaseNullMem | 13 | #define ReleaseNullBuffer(b) BuffFree(b) |
14 | #define BuffFree MemFree | 14 | #define BuffFree(b) if (b.pbData) { MemFree(b.pbData); b.pbData = NULL; } b.cbData = 0 |
15 | |||
16 | |||
17 | // structs | ||
18 | |||
19 | // A buffer that owns its data and must be freed with BuffFree(). | ||
20 | typedef struct _BUFF_BUFFER | ||
21 | { | ||
22 | LPBYTE pbData; | ||
23 | SIZE_T cbData; | ||
24 | } BUFF_BUFFER; | ||
25 | |||
26 | // A read-only buffer with internal pointer that can be advanced for multiple reads. | ||
27 | typedef struct _BUFF_READER | ||
28 | { | ||
29 | LPCBYTE pbData; | ||
30 | SIZE_T cbData; | ||
31 | |||
32 | SIZE_T iBuffer; | ||
33 | } BUFF_READER; | ||
34 | |||
35 | // A write buffer that does not own its data. | ||
36 | typedef struct _BUFF_WRITER | ||
37 | { | ||
38 | LPBYTE *ppbData; | ||
39 | SIZE_T *pcbData; | ||
40 | } BUFF_WRITER; | ||
15 | 41 | ||
16 | 42 | ||
17 | // function declarations | 43 | // function declarations |
@@ -53,6 +79,37 @@ HRESULT BuffReadStream( | |||
53 | __deref_inout_bcount(*pcbStream) BYTE** ppbStream, | 79 | __deref_inout_bcount(*pcbStream) BYTE** ppbStream, |
54 | __out SIZE_T* pcbStream | 80 | __out SIZE_T* pcbStream |
55 | ); | 81 | ); |
82 | HRESULT BuffSkipExtraData( | ||
83 | __in SIZE_T cbExpectedSize, | ||
84 | __in SIZE_T cbActualSize, | ||
85 | __inout SIZE_T* piBuffer | ||
86 | ); | ||
87 | |||
88 | HRESULT BuffReaderReadNumber( | ||
89 | __in BUFF_READER* pReader, | ||
90 | __out DWORD* pdw | ||
91 | ); | ||
92 | HRESULT BuffReaderReadNumber64( | ||
93 | __in BUFF_READER* pReader, | ||
94 | __out DWORD64* pdw64 | ||
95 | ); | ||
96 | HRESULT BuffReaderReadPointer( | ||
97 | __in BUFF_READER* pReader, | ||
98 | __out DWORD_PTR* pdw | ||
99 | ); | ||
100 | HRESULT BuffReaderReadString( | ||
101 | __in BUFF_READER* pReader, | ||
102 | __deref_out_z LPWSTR* pscz | ||
103 | ); | ||
104 | HRESULT BuffReaderReadStringAnsi( | ||
105 | __in BUFF_READER* pReader, | ||
106 | __deref_out_z LPSTR* pscz | ||
107 | ); | ||
108 | HRESULT BuffReaderReadStream( | ||
109 | __in BUFF_READER* pReader, | ||
110 | __deref_inout_bcount(*pcbStream) BYTE** ppbStream, | ||
111 | __out SIZE_T* pcbStream | ||
112 | ); | ||
56 | 113 | ||
57 | HRESULT BuffWriteNumber( | 114 | HRESULT BuffWriteNumber( |
58 | __deref_inout_bcount(*piBuffer) BYTE** ppbBuffer, | 115 | __deref_inout_bcount(*piBuffer) BYTE** ppbBuffer, |
@@ -86,6 +143,58 @@ HRESULT BuffWriteStream( | |||
86 | __in SIZE_T cbStream | 143 | __in SIZE_T cbStream |
87 | ); | 144 | ); |
88 | 145 | ||
146 | HRESULT BuffWriteNumberToBuffer( | ||
147 | __in BUFF_BUFFER* pBuffer, | ||
148 | __in DWORD dw | ||
149 | ); | ||
150 | HRESULT BuffWriteNumber64ToBuffer( | ||
151 | __in BUFF_BUFFER* pBuffer, | ||
152 | __in DWORD64 dw64 | ||
153 | ); | ||
154 | HRESULT BuffWritePointerToBuffer( | ||
155 | __in BUFF_BUFFER* pBuffer, | ||
156 | __in DWORD_PTR dw | ||
157 | ); | ||
158 | HRESULT BuffWriteStringToBuffer( | ||
159 | __in BUFF_BUFFER* pBuffer, | ||
160 | __in_z_opt LPCWSTR scz | ||
161 | ); | ||
162 | HRESULT BuffWriteStringAnsiToBuffer( | ||
163 | __in BUFF_BUFFER* pBuffer, | ||
164 | __in_z_opt LPCSTR scz | ||
165 | ); | ||
166 | HRESULT BuffWriteStreamToBuffer( | ||
167 | __in BUFF_BUFFER* pBuffer, | ||
168 | __in_bcount(cbStream) const BYTE* pbStream, | ||
169 | __in SIZE_T cbStream | ||
170 | ); | ||
171 | |||
172 | HRESULT BuffWriterWriteNumber( | ||
173 | __in BUFF_WRITER* pWriter, | ||
174 | __in DWORD dw | ||
175 | ); | ||
176 | HRESULT BuffWriterWriteNumber64( | ||
177 | __in BUFF_WRITER* pWriter, | ||
178 | __in DWORD64 dw64 | ||
179 | ); | ||
180 | HRESULT BuffWriterWritePointer( | ||
181 | __in BUFF_WRITER* pWriter, | ||
182 | __in DWORD_PTR dw | ||
183 | ); | ||
184 | HRESULT BuffWriterWriteString( | ||
185 | __in BUFF_WRITER* pWriter, | ||
186 | __in_z_opt LPCWSTR scz | ||
187 | ); | ||
188 | HRESULT BuffWriterWriteStringAnsi( | ||
189 | __in BUFF_WRITER* pWriter, | ||
190 | __in_z_opt LPCSTR scz | ||
191 | ); | ||
192 | HRESULT BuffWriterWriteStream( | ||
193 | __in BUFF_WRITER* pWriter, | ||
194 | __in_bcount(cbStream) const BYTE* pbStream, | ||
195 | __in SIZE_T cbStream | ||
196 | ); | ||
197 | |||
89 | #ifdef __cplusplus | 198 | #ifdef __cplusplus |
90 | } | 199 | } |
91 | #endif | 200 | #endif |