diff options
| author | Bob Arnson <bob@firegiant.com> | 2020-11-29 18:57:55 -0500 |
|---|---|---|
| committer | Bob Arnson <bob@firegiant.com> | 2020-12-26 22:08:07 -0500 |
| commit | 0ae3b1e7b5c0beff0fcfb82728c5bf9f25aee250 (patch) | |
| tree | a8c4cf37f7bcf103db5892c842cb4211ca3ee779 /src/dutil/buffutil.cpp | |
| parent | 6554b42e999c8ff2cf20361a7dd7ec500723ec71 (diff) | |
| download | wix-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.cpp | 59 |
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 | ||
| 53 | extern "C" HRESULT BuffReadNumber64( | 53 | extern "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 | ||
| 85 | extern "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 | |||
| 113 | LExit: | ||
| 114 | return hr; | ||
| 115 | } | ||
| 116 | |||
| 85 | extern "C" HRESULT BuffReadString( | 117 | extern "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 | ||
| 335 | extern "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 | |||
| 354 | LExit: | ||
| 355 | return hr; | ||
| 356 | } | ||
| 357 | |||
| 303 | extern "C" HRESULT BuffWriteString( | 358 | extern "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, |
