aboutsummaryrefslogtreecommitdiff
path: root/src/dutil/buffutil.cpp
diff options
context:
space:
mode:
authorBob Arnson <bob@firegiant.com>2020-11-29 18:57:55 -0500
committerBob Arnson <bob@firegiant.com>2020-12-26 22:08:07 -0500
commit0ae3b1e7b5c0beff0fcfb82728c5bf9f25aee250 (patch)
treea8c4cf37f7bcf103db5892c842cb4211ca3ee779 /src/dutil/buffutil.cpp
parent6554b42e999c8ff2cf20361a7dd7ec500723ec71 (diff)
downloadwix-0ae3b1e7b5c0beff0fcfb82728c5bf9f25aee250.tar.gz
wix-0ae3b1e7b5c0beff0fcfb82728c5bf9f25aee250.tar.bz2
wix-0ae3b1e7b5c0beff0fcfb82728c5bf9f25aee250.zip
More size_t-ification.
Diffstat (limited to 'src/dutil/buffutil.cpp')
-rw-r--r--src/dutil/buffutil.cpp59
1 files changed, 57 insertions, 2 deletions
diff --git a/src/dutil/buffutil.cpp b/src/dutil/buffutil.cpp
index e78db24f..a70aaa81 100644
--- a/src/dutil/buffutil.cpp
+++ b/src/dutil/buffutil.cpp
@@ -51,11 +51,11 @@ LExit:
51} 51}
52 52
53extern "C" HRESULT BuffReadNumber64( 53extern "C" HRESULT BuffReadNumber64(
54 __in_bcount(cbBuffer) const BYTE* pbBuffer, 54 __in_bcount(cbBuffer) const BYTE * pbBuffer,
55 __in SIZE_T cbBuffer, 55 __in SIZE_T cbBuffer,
56 __inout SIZE_T* piBuffer, 56 __inout SIZE_T* piBuffer,
57 __out DWORD64* pdw64 57 __out DWORD64* pdw64
58 ) 58)
59{ 59{
60 Assert(pbBuffer); 60 Assert(pbBuffer);
61 Assert(piBuffer); 61 Assert(piBuffer);
@@ -82,6 +82,38 @@ LExit:
82 return hr; 82 return hr;
83} 83}
84 84
85extern "C" HRESULT BuffReadPointer(
86 __in_bcount(cbBuffer) const BYTE * pbBuffer,
87 __in SIZE_T cbBuffer,
88 __inout SIZE_T* piBuffer,
89 __out DWORD_PTR* pdw64
90)
91{
92 Assert(pbBuffer);
93 Assert(piBuffer);
94 Assert(pdw64);
95
96 HRESULT hr = S_OK;
97 SIZE_T cbAvailable = 0;
98
99 // get availiable data size
100 hr = ::SIZETSub(cbBuffer, *piBuffer, &cbAvailable);
101 ExitOnRootFailure(hr, "Failed to calculate available data size.");
102
103 // verify buffer size
104 if (sizeof(DWORD_PTR) > cbAvailable)
105 {
106 hr = E_INVALIDARG;
107 ExitOnRootFailure(hr, "Buffer too small.");
108 }
109
110 *pdw64 = *(const DWORD_PTR*)(pbBuffer + *piBuffer);
111 *piBuffer += sizeof(DWORD_PTR);
112
113LExit:
114 return hr;
115}
116
85extern "C" HRESULT BuffReadString( 117extern "C" HRESULT BuffReadString(
86 __in_bcount(cbBuffer) const BYTE* pbBuffer, 118 __in_bcount(cbBuffer) const BYTE* pbBuffer,
87 __in SIZE_T cbBuffer, 119 __in SIZE_T cbBuffer,
@@ -300,6 +332,29 @@ LExit:
300 return hr; 332 return hr;
301} 333}
302 334
335extern "C" HRESULT BuffWritePointer(
336 __deref_out_bcount(*piBuffer) BYTE** ppbBuffer,
337 __inout SIZE_T* piBuffer,
338 __in DWORD_PTR dw
339)
340{
341 Assert(ppbBuffer);
342 Assert(piBuffer);
343
344 HRESULT hr = S_OK;
345
346 // make sure we have a buffer with sufficient space
347 hr = EnsureBufferSize(ppbBuffer, *piBuffer + sizeof(DWORD_PTR));
348 ExitOnFailure(hr, "Failed to ensure buffer size.");
349
350 // copy data to buffer
351 *(DWORD_PTR*)(*ppbBuffer + *piBuffer) = dw;
352 *piBuffer += sizeof(DWORD_PTR);
353
354LExit:
355 return hr;
356}
357
303extern "C" HRESULT BuffWriteString( 358extern "C" HRESULT BuffWriteString(
304 __deref_out_bcount(*piBuffer) BYTE** ppbBuffer, 359 __deref_out_bcount(*piBuffer) BYTE** ppbBuffer,
305 __inout SIZE_T* piBuffer, 360 __inout SIZE_T* piBuffer,