aboutsummaryrefslogtreecommitdiff
path: root/src/engine/pseudobundle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/pseudobundle.cpp')
-rw-r--r--src/engine/pseudobundle.cpp75
1 files changed, 22 insertions, 53 deletions
diff --git a/src/engine/pseudobundle.cpp b/src/engine/pseudobundle.cpp
index 73fbb019..db25096b 100644
--- a/src/engine/pseudobundle.cpp
+++ b/src/engine/pseudobundle.cpp
@@ -26,6 +26,7 @@ extern "C" HRESULT PseudoBundleInitialize(
26{ 26{
27 HRESULT hr = S_OK; 27 HRESULT hr = S_OK;
28 LPWSTR sczRelationTypeCommandLineSwitch = NULL; 28 LPWSTR sczRelationTypeCommandLineSwitch = NULL;
29 BURN_PAYLOAD* pPayload = NULL;
29 30
30 LPCWSTR wzRelationTypeCommandLine = CoreRelationTypeToCommandLineString(relationType); 31 LPCWSTR wzRelationTypeCommandLine = CoreRelationTypeToCommandLineString(relationType);
31 if (wzRelationTypeCommandLine) 32 if (wzRelationTypeCommandLine)
@@ -34,41 +35,40 @@ extern "C" HRESULT PseudoBundleInitialize(
34 } 35 }
35 36
36 // Initialize the single payload, and fill out all the necessary fields 37 // Initialize the single payload, and fill out all the necessary fields
37 pPackage->rgPayloads = (BURN_PACKAGE_PAYLOAD *)MemAlloc(sizeof(BURN_PACKAGE_PAYLOAD), TRUE); 38 pPackage->payloads.rgpPayloads = (BURN_PAYLOAD**)MemAlloc(sizeof(BURN_PAYLOAD*), TRUE);
38 ExitOnNull(pPackage->rgPayloads, hr, E_OUTOFMEMORY, "Failed to allocate space for burn package payload inside of related bundle struct"); 39 ExitOnNull(pPackage->payloads.rgpPayloads, hr, E_OUTOFMEMORY, "Failed to allocate space for burn payload group inside of related bundle struct");
39 pPackage->cPayloads = 1; 40 pPackage->payloads.cPayloads = 1;
40 41
41 pPackage->rgPayloads->pPayload = (BURN_PAYLOAD *)MemAlloc(sizeof(BURN_PAYLOAD), TRUE); 42 pPayload = (BURN_PAYLOAD*)MemAlloc(sizeof(BURN_PAYLOAD), TRUE);
42 ExitOnNull(pPackage->rgPayloads, hr, E_OUTOFMEMORY, "Failed to allocate space for burn payload inside of related bundle struct"); 43 ExitOnNull(pPayload, hr, E_OUTOFMEMORY, "Failed to allocate space for burn payload inside of related bundle struct");
43 pPackage->rgPayloads->pPayload->packaging = BURN_PAYLOAD_PACKAGING_EXTERNAL; 44 pPackage->payloads.rgpPayloads[0] = pPayload;
44 pPackage->rgPayloads->pPayload->qwFileSize = qwSize; 45 pPayload->packaging = BURN_PAYLOAD_PACKAGING_EXTERNAL;
46 pPayload->qwFileSize = qwSize;
45 47
46 hr = StrAllocString(&pPackage->rgPayloads->pPayload->sczKey, wzId, 0); 48 hr = StrAllocString(&pPayload->sczKey, wzId, 0);
47 ExitOnFailure(hr, "Failed to copy key for pseudo bundle payload."); 49 ExitOnFailure(hr, "Failed to copy key for pseudo bundle payload.");
48 50
49 hr = StrAllocString(&pPackage->rgPayloads->pPayload->sczFilePath, wzFilePath, 0); 51 hr = StrAllocString(&pPayload->sczFilePath, wzFilePath, 0);
50 ExitOnFailure(hr, "Failed to copy filename for pseudo bundle."); 52 ExitOnFailure(hr, "Failed to copy filename for pseudo bundle.");
51 53
52 hr = StrAllocString(&pPackage->rgPayloads->pPayload->sczSourcePath, wzLocalSource, 0); 54 hr = StrAllocString(&pPayload->sczSourcePath, wzLocalSource, 0);
53 ExitOnFailure(hr, "Failed to copy local source path for pseudo bundle."); 55 ExitOnFailure(hr, "Failed to copy local source path for pseudo bundle.");
54 56
55 if (wzDownloadSource && *wzDownloadSource) 57 if (wzDownloadSource && *wzDownloadSource)
56 { 58 {
57 hr = StrAllocString(&pPackage->rgPayloads->pPayload->downloadSource.sczUrl, wzDownloadSource, 0); 59 hr = StrAllocString(&pPayload->downloadSource.sczUrl, wzDownloadSource, 0);
58 ExitOnFailure(hr, "Failed to copy download source for pseudo bundle."); 60 ExitOnFailure(hr, "Failed to copy download source for pseudo bundle.");
59 } 61 }
60 62
61 if (pbHash) 63 if (pbHash)
62 { 64 {
63 pPackage->rgPayloads->pPayload->pbHash = static_cast<BYTE*>(MemAlloc(cbHash, FALSE)); 65 pPayload->pbHash = static_cast<BYTE*>(MemAlloc(cbHash, FALSE));
64 ExitOnNull(pPackage->rgPayloads->pPayload->pbHash, hr, E_OUTOFMEMORY, "Failed to allocate memory for pseudo bundle payload hash."); 66 ExitOnNull(pPayload->pbHash, hr, E_OUTOFMEMORY, "Failed to allocate memory for pseudo bundle payload hash.");
65 67
66 pPackage->rgPayloads->pPayload->cbHash = cbHash; 68 pPayload->cbHash = cbHash;
67 memcpy_s(pPackage->rgPayloads->pPayload->pbHash, pPackage->rgPayloads->pPayload->cbHash, pbHash, cbHash); 69 memcpy_s(pPayload->pbHash, pPayload->cbHash, pbHash, cbHash);
68 } 70 }
69 71
70 pPackage->rgPayloads->fCached = fCached;
71
72 pPackage->Exe.fPseudoBundle = TRUE; 72 pPackage->Exe.fPseudoBundle = TRUE;
73 73
74 pPackage->type = BURN_PACKAGE_TYPE_EXE; 74 pPackage->type = BURN_PACKAGE_TYPE_EXE;
@@ -171,44 +171,13 @@ extern "C" HRESULT PseudoBundleInitializePassthrough(
171 LPWSTR sczArguments = NULL; 171 LPWSTR sczArguments = NULL;
172 172
173 // Initialize the payloads, and copy the necessary fields. 173 // Initialize the payloads, and copy the necessary fields.
174 pPassthroughPackage->rgPayloads = (BURN_PACKAGE_PAYLOAD *)MemAlloc(sizeof(BURN_PACKAGE_PAYLOAD) * pPackage->cPayloads, TRUE); 174 pPassthroughPackage->payloads.rgpPayloads = (BURN_PAYLOAD**)MemAlloc(sizeof(BURN_PAYLOAD*) * pPackage->payloads.cPayloads, TRUE);
175 ExitOnNull(pPassthroughPackage->rgPayloads, hr, E_OUTOFMEMORY, "Failed to allocate space for burn package payload inside of passthrough bundle."); 175 ExitOnNull(pPassthroughPackage->payloads.rgpPayloads, hr, E_OUTOFMEMORY, "Failed to allocate space for burn package payload inside of passthrough bundle.");
176 pPassthroughPackage->cPayloads = pPackage->cPayloads; 176 pPassthroughPackage->payloads.cPayloads = pPackage->payloads.cPayloads;
177 177
178 for (DWORD iPayload = 0; iPayload < pPackage->cPayloads; ++iPayload) 178 for (DWORD iPayload = 0; iPayload < pPackage->payloads.cPayloads; ++iPayload)
179 { 179 {
180 BURN_PACKAGE_PAYLOAD* pPayload = pPackage->rgPayloads + iPayload; 180 pPassthroughPackage->payloads.rgpPayloads[iPayload] = pPackage->payloads.rgpPayloads[iPayload];
181
182 pPassthroughPackage->rgPayloads[iPayload].pPayload = (BURN_PAYLOAD *)MemAlloc(sizeof(BURN_PAYLOAD), TRUE);
183 ExitOnNull(pPassthroughPackage->rgPayloads[iPayload].pPayload, hr, E_OUTOFMEMORY, "Failed to allocate space for burn payload inside of related bundle struct");
184 pPassthroughPackage->rgPayloads[iPayload].pPayload->packaging = pPayload->pPayload->packaging;
185 pPassthroughPackage->rgPayloads[iPayload].pPayload->qwFileSize = pPayload->pPayload->qwFileSize;
186
187 hr = StrAllocString(&pPassthroughPackage->rgPayloads[iPayload].pPayload->sczKey, pPayload->pPayload->sczKey, 0);
188 ExitOnFailure(hr, "Failed to copy key for passthrough pseudo bundle payload.");
189
190 hr = StrAllocString(&pPassthroughPackage->rgPayloads[iPayload].pPayload->sczFilePath, pPayload->pPayload->sczFilePath, 0);
191 ExitOnFailure(hr, "Failed to copy filename for passthrough pseudo bundle.");
192
193 hr = StrAllocString(&pPassthroughPackage->rgPayloads[iPayload].pPayload->sczSourcePath, pPayload->pPayload->sczSourcePath, 0);
194 ExitOnFailure(hr, "Failed to copy local source path for passthrough pseudo bundle.");
195
196 if (pPayload->pPayload->downloadSource.sczUrl)
197 {
198 hr = StrAllocString(&pPassthroughPackage->rgPayloads[iPayload].pPayload->downloadSource.sczUrl, pPayload->pPayload->downloadSource.sczUrl, 0);
199 ExitOnFailure(hr, "Failed to copy download source for passthrough pseudo bundle.");
200 }
201
202 if (pPayload->pPayload->pbHash)
203 {
204 pPassthroughPackage->rgPayloads[iPayload].pPayload->pbHash = static_cast<BYTE*>(MemAlloc(pPayload->pPayload->cbHash, FALSE));
205 ExitOnNull(pPassthroughPackage->rgPayloads[iPayload].pPayload->pbHash, hr, E_OUTOFMEMORY, "Failed to allocate memory for pseudo bundle payload hash.");
206
207 pPassthroughPackage->rgPayloads[iPayload].pPayload->cbHash = pPayload->pPayload->cbHash;
208 memcpy_s(pPassthroughPackage->rgPayloads[iPayload].pPayload->pbHash, pPassthroughPackage->rgPayloads[iPayload].pPayload->cbHash, pPayload->pPayload->pbHash, pPayload->pPayload->cbHash);
209 }
210
211 pPassthroughPackage->rgPayloads[iPayload].fCached = pPayload->fCached;
212 } 181 }
213 182
214 pPassthroughPackage->Exe.fPseudoBundle = TRUE; 183 pPassthroughPackage->Exe.fPseudoBundle = TRUE;