diff options
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 | } | ||