From 0d3d54992104288e9ee0c834d0b96e8502fd2d42 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Thu, 11 Jan 2024 18:26:20 -0800 Subject: Move the BootstrapperApplication out of proc --- src/libs/dutil/WixToolset.DUtil/inc/buffutil.h | 115 ++++++++++++++++++++++++- 1 file changed, 112 insertions(+), 3 deletions(-) (limited to 'src/libs/dutil/WixToolset.DUtil/inc/buffutil.h') 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" { // macro definitions -#define ReleaseBuffer ReleaseMem -#define ReleaseNullBuffer ReleaseNullMem -#define BuffFree MemFree +#define ReleaseBuffer(b) BuffFree(b) +#define ReleaseNullBuffer(b) BuffFree(b) +#define BuffFree(b) if (b.pbData) { MemFree(b.pbData); b.pbData = NULL; } b.cbData = 0 + + +// structs + +// A buffer that owns its data and must be freed with BuffFree(). +typedef struct _BUFF_BUFFER +{ + LPBYTE pbData; + SIZE_T cbData; +} BUFF_BUFFER; + +// A read-only buffer with internal pointer that can be advanced for multiple reads. +typedef struct _BUFF_READER +{ + LPCBYTE pbData; + SIZE_T cbData; + + SIZE_T iBuffer; +} BUFF_READER; + +// A write buffer that does not own its data. +typedef struct _BUFF_WRITER +{ + LPBYTE *ppbData; + SIZE_T *pcbData; +} BUFF_WRITER; // function declarations @@ -53,6 +79,37 @@ HRESULT BuffReadStream( __deref_inout_bcount(*pcbStream) BYTE** ppbStream, __out SIZE_T* pcbStream ); +HRESULT BuffSkipExtraData( + __in SIZE_T cbExpectedSize, + __in SIZE_T cbActualSize, + __inout SIZE_T* piBuffer + ); + +HRESULT BuffReaderReadNumber( + __in BUFF_READER* pReader, + __out DWORD* pdw + ); +HRESULT BuffReaderReadNumber64( + __in BUFF_READER* pReader, + __out DWORD64* pdw64 + ); +HRESULT BuffReaderReadPointer( + __in BUFF_READER* pReader, + __out DWORD_PTR* pdw +); +HRESULT BuffReaderReadString( + __in BUFF_READER* pReader, + __deref_out_z LPWSTR* pscz + ); +HRESULT BuffReaderReadStringAnsi( + __in BUFF_READER* pReader, + __deref_out_z LPSTR* pscz + ); +HRESULT BuffReaderReadStream( + __in BUFF_READER* pReader, + __deref_inout_bcount(*pcbStream) BYTE** ppbStream, + __out SIZE_T* pcbStream + ); HRESULT BuffWriteNumber( __deref_inout_bcount(*piBuffer) BYTE** ppbBuffer, @@ -86,6 +143,58 @@ HRESULT BuffWriteStream( __in SIZE_T cbStream ); +HRESULT BuffWriteNumberToBuffer( + __in BUFF_BUFFER* pBuffer, + __in DWORD dw + ); +HRESULT BuffWriteNumber64ToBuffer( + __in BUFF_BUFFER* pBuffer, + __in DWORD64 dw64 + ); +HRESULT BuffWritePointerToBuffer( + __in BUFF_BUFFER* pBuffer, + __in DWORD_PTR dw + ); +HRESULT BuffWriteStringToBuffer( + __in BUFF_BUFFER* pBuffer, + __in_z_opt LPCWSTR scz + ); +HRESULT BuffWriteStringAnsiToBuffer( + __in BUFF_BUFFER* pBuffer, + __in_z_opt LPCSTR scz + ); +HRESULT BuffWriteStreamToBuffer( + __in BUFF_BUFFER* pBuffer, + __in_bcount(cbStream) const BYTE* pbStream, + __in SIZE_T cbStream + ); + +HRESULT BuffWriterWriteNumber( + __in BUFF_WRITER* pWriter, + __in DWORD dw + ); +HRESULT BuffWriterWriteNumber64( + __in BUFF_WRITER* pWriter, + __in DWORD64 dw64 + ); +HRESULT BuffWriterWritePointer( + __in BUFF_WRITER* pWriter, + __in DWORD_PTR dw + ); +HRESULT BuffWriterWriteString( + __in BUFF_WRITER* pWriter, + __in_z_opt LPCWSTR scz + ); +HRESULT BuffWriterWriteStringAnsi( + __in BUFF_WRITER* pWriter, + __in_z_opt LPCSTR scz + ); +HRESULT BuffWriterWriteStream( + __in BUFF_WRITER* pWriter, + __in_bcount(cbStream) const BYTE* pbStream, + __in SIZE_T cbStream + ); + #ifdef __cplusplus } #endif -- cgit v1.2.3-55-g6feb