aboutsummaryrefslogtreecommitdiff
path: root/src/libs/dutil/WixToolset.DUtil/inc/buffutil.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/dutil/WixToolset.DUtil/inc/buffutil.h')
-rw-r--r--src/libs/dutil/WixToolset.DUtil/inc/buffutil.h115
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().
20typedef 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.
27typedef 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.
36typedef 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 );
82HRESULT BuffSkipExtraData(
83 __in SIZE_T cbExpectedSize,
84 __in SIZE_T cbActualSize,
85 __inout SIZE_T* piBuffer
86 );
87
88HRESULT BuffReaderReadNumber(
89 __in BUFF_READER* pReader,
90 __out DWORD* pdw
91 );
92HRESULT BuffReaderReadNumber64(
93 __in BUFF_READER* pReader,
94 __out DWORD64* pdw64
95 );
96HRESULT BuffReaderReadPointer(
97 __in BUFF_READER* pReader,
98 __out DWORD_PTR* pdw
99);
100HRESULT BuffReaderReadString(
101 __in BUFF_READER* pReader,
102 __deref_out_z LPWSTR* pscz
103 );
104HRESULT BuffReaderReadStringAnsi(
105 __in BUFF_READER* pReader,
106 __deref_out_z LPSTR* pscz
107 );
108HRESULT BuffReaderReadStream(
109 __in BUFF_READER* pReader,
110 __deref_inout_bcount(*pcbStream) BYTE** ppbStream,
111 __out SIZE_T* pcbStream
112 );
56 113
57HRESULT BuffWriteNumber( 114HRESULT 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
146HRESULT BuffWriteNumberToBuffer(
147 __in BUFF_BUFFER* pBuffer,
148 __in DWORD dw
149 );
150HRESULT BuffWriteNumber64ToBuffer(
151 __in BUFF_BUFFER* pBuffer,
152 __in DWORD64 dw64
153 );
154HRESULT BuffWritePointerToBuffer(
155 __in BUFF_BUFFER* pBuffer,
156 __in DWORD_PTR dw
157 );
158HRESULT BuffWriteStringToBuffer(
159 __in BUFF_BUFFER* pBuffer,
160 __in_z_opt LPCWSTR scz
161 );
162HRESULT BuffWriteStringAnsiToBuffer(
163 __in BUFF_BUFFER* pBuffer,
164 __in_z_opt LPCSTR scz
165 );
166HRESULT BuffWriteStreamToBuffer(
167 __in BUFF_BUFFER* pBuffer,
168 __in_bcount(cbStream) const BYTE* pbStream,
169 __in SIZE_T cbStream
170 );
171
172HRESULT BuffWriterWriteNumber(
173 __in BUFF_WRITER* pWriter,
174 __in DWORD dw
175 );
176HRESULT BuffWriterWriteNumber64(
177 __in BUFF_WRITER* pWriter,
178 __in DWORD64 dw64
179 );
180HRESULT BuffWriterWritePointer(
181 __in BUFF_WRITER* pWriter,
182 __in DWORD_PTR dw
183 );
184HRESULT BuffWriterWriteString(
185 __in BUFF_WRITER* pWriter,
186 __in_z_opt LPCWSTR scz
187 );
188HRESULT BuffWriterWriteStringAnsi(
189 __in BUFF_WRITER* pWriter,
190 __in_z_opt LPCSTR scz
191 );
192HRESULT 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