diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2021-04-25 21:50:14 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2021-04-25 22:58:23 -0500 |
| commit | d291d27f94d0702bcd4ffd6fb72125c8996b3aef (patch) | |
| tree | 43bce4f35e93965385a9c71a8c68e7149816bc12 /src/engine/payload.cpp | |
| parent | dd16dd2344ca3c750a8fc52c1e27a605fd25940d (diff) | |
| download | wix-d291d27f94d0702bcd4ffd6fb72125c8996b3aef.tar.gz wix-d291d27f94d0702bcd4ffd6fb72125c8996b3aef.tar.bz2 wix-d291d27f94d0702bcd4ffd6fb72125c8996b3aef.zip | |
Share code to map stream name to payload when extracting containers.
Diffstat (limited to 'src/engine/payload.cpp')
| -rw-r--r-- | src/engine/payload.cpp | 46 |
1 files changed, 6 insertions, 40 deletions
diff --git a/src/engine/payload.cpp b/src/engine/payload.cpp index f29fa2bd..72eb3476 100644 --- a/src/engine/payload.cpp +++ b/src/engine/payload.cpp | |||
| @@ -190,9 +190,8 @@ extern "C" void PayloadsUninitialize( | |||
| 190 | memset(pPayloads, 0, sizeof(BURN_PAYLOADS)); | 190 | memset(pPayloads, 0, sizeof(BURN_PAYLOADS)); |
| 191 | } | 191 | } |
| 192 | 192 | ||
| 193 | extern "C" HRESULT PayloadExtractFromContainer( | 193 | extern "C" HRESULT PayloadExtractUXContainer( |
| 194 | __in BURN_PAYLOADS* pPayloads, | 194 | __in BURN_PAYLOADS* pPayloads, |
| 195 | __in_opt BURN_CONTAINER* pContainer, | ||
| 196 | __in BURN_CONTAINER_CONTEXT* pContainerContext, | 195 | __in BURN_CONTAINER_CONTEXT* pContainerContext, |
| 197 | __in_z LPCWSTR wzTargetDir | 196 | __in_z LPCWSTR wzTargetDir |
| 198 | ) | 197 | ) |
| @@ -215,7 +214,7 @@ extern "C" HRESULT PayloadExtractFromContainer( | |||
| 215 | ExitOnFailure(hr, "Failed to get next stream."); | 214 | ExitOnFailure(hr, "Failed to get next stream."); |
| 216 | 215 | ||
| 217 | // find payload by stream name | 216 | // find payload by stream name |
| 218 | hr = FindEmbeddedBySourcePath(pPayloads, pContainer, sczStreamName, &pPayload); | 217 | hr = PayloadFindEmbeddedBySourcePath(pPayloads, sczStreamName, &pPayload); |
| 219 | ExitOnFailure(hr, "Failed to find embedded payload: %ls", sczStreamName); | 218 | ExitOnFailure(hr, "Failed to find embedded payload: %ls", sczStreamName); |
| 220 | 219 | ||
| 221 | // make file path | 220 | // make file path |
| @@ -241,15 +240,11 @@ extern "C" HRESULT PayloadExtractFromContainer( | |||
| 241 | { | 240 | { |
| 242 | pPayload = &pPayloads->rgPayloads[i]; | 241 | pPayload = &pPayloads->rgPayloads[i]; |
| 243 | 242 | ||
| 244 | // if the payload is part of the container | 243 | // if the payload has not been acquired |
| 245 | if (!pContainer || pPayload->pContainer == pContainer) | 244 | if (BURN_PAYLOAD_STATE_ACQUIRED > pPayload->state) |
| 246 | { | 245 | { |
| 247 | // if the payload has not been acquired | 246 | hr = E_INVALIDDATA; |
| 248 | if (BURN_PAYLOAD_STATE_ACQUIRED > pPayload->state) | 247 | ExitOnRootFailure(hr, "Payload was not found in container: %ls", pPayload->sczKey); |
| 249 | { | ||
| 250 | hr = E_INVALIDDATA; | ||
| 251 | ExitOnRootFailure(hr, "Payload was not found in container: %ls", pPayload->sczKey); | ||
| 252 | } | ||
| 253 | } | 248 | } |
| 254 | } | 249 | } |
| 255 | 250 | ||
| @@ -317,32 +312,3 @@ LExit: | |||
| 317 | 312 | ||
| 318 | 313 | ||
| 319 | // internal function definitions | 314 | // internal function definitions |
| 320 | |||
| 321 | static HRESULT FindEmbeddedBySourcePath( | ||
| 322 | __in BURN_PAYLOADS* pPayloads, | ||
| 323 | __in_opt BURN_CONTAINER* pContainer, | ||
| 324 | __in_z LPCWSTR wzStreamName, | ||
| 325 | __out BURN_PAYLOAD** ppPayload | ||
| 326 | ) | ||
| 327 | { | ||
| 328 | HRESULT hr = S_OK; | ||
| 329 | |||
| 330 | for (DWORD i = 0; i < pPayloads->cPayloads; ++i) | ||
| 331 | { | ||
| 332 | BURN_PAYLOAD* pPayload = &pPayloads->rgPayloads[i]; | ||
| 333 | |||
| 334 | if (BURN_PAYLOAD_PACKAGING_EMBEDDED == pPayload->packaging && (!pContainer || pPayload->pContainer == pContainer)) | ||
| 335 | { | ||
| 336 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, pPayload->sczSourcePath, -1, wzStreamName, -1)) | ||
| 337 | { | ||
| 338 | *ppPayload = pPayload; | ||
| 339 | ExitFunction1(hr = S_OK); | ||
| 340 | } | ||
| 341 | } | ||
| 342 | } | ||
| 343 | |||
| 344 | hr = E_NOTFOUND; | ||
| 345 | |||
| 346 | LExit: | ||
| 347 | return hr; | ||
| 348 | } | ||
