aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/pseudobundle.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-12-10 11:42:44 -0600
committerSean Hall <r.sean.hall@gmail.com>2021-12-11 20:03:13 -0600
commitfc30db9fa3aa1d25a6ef078452864673caa67ec5 (patch)
treee3415a5a1329a867b2934a038243e95098214ec3 /src/burn/engine/pseudobundle.cpp
parent1d58b3333d1d694d08b68f6c87223aa504bfe773 (diff)
downloadwix-fc30db9fa3aa1d25a6ef078452864673caa67ec5.tar.gz
wix-fc30db9fa3aa1d25a6ef078452864673caa67ec5.tar.bz2
wix-fc30db9fa3aa1d25a6ef078452864673caa67ec5.zip
Add BA events for setting the update bundle.
Fixes #6410
Diffstat (limited to 'src/burn/engine/pseudobundle.cpp')
-rw-r--r--src/burn/engine/pseudobundle.cpp77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/burn/engine/pseudobundle.cpp b/src/burn/engine/pseudobundle.cpp
index 52b7bd8a..91c6c14f 100644
--- a/src/burn/engine/pseudobundle.cpp
+++ b/src/burn/engine/pseudobundle.cpp
@@ -240,3 +240,80 @@ LExit:
240 ReleaseStr(sczArguments); 240 ReleaseStr(sczArguments);
241 return hr; 241 return hr;
242} 242}
243
244extern "C" HRESULT PseudoBundleInitializeUpdateBundle(
245 __in BURN_PACKAGE* pPackage,
246 __in_z LPCWSTR wzId,
247 __in_z LPCWSTR wzCacheId,
248 __in_z LPCWSTR wzFilePath,
249 __in_z LPCWSTR wzLocalSource,
250 __in_z_opt LPCWSTR wzDownloadSource,
251 __in DWORD64 qwSize,
252 __in_z LPCWSTR wzInstallArguments,
253 __in_opt const BYTE* pbHash,
254 __in const DWORD cbHash
255 )
256{
257 HRESULT hr = S_OK;
258 BURN_PAYLOAD* pPayload = NULL;
259
260 // Initialize the single payload, and fill out all the necessary fields
261 pPackage->payloads.rgItems = (BURN_PAYLOAD_GROUP_ITEM*)MemAlloc(sizeof(BURN_PAYLOAD_GROUP_ITEM), TRUE);
262 ExitOnNull(pPackage->payloads.rgItems, hr, E_OUTOFMEMORY, "Failed to allocate space for burn payload group inside of update bundle struct");
263 pPackage->payloads.cItems = 1;
264
265 pPayload = (BURN_PAYLOAD*)MemAlloc(sizeof(BURN_PAYLOAD), TRUE);
266 ExitOnNull(pPayload, hr, E_OUTOFMEMORY, "Failed to allocate space for burn payload inside of update bundle struct");
267 pPackage->payloads.rgItems[0].pPayload = pPayload;
268 pPayload->packaging = BURN_PAYLOAD_PACKAGING_EXTERNAL;
269 pPayload->qwFileSize = qwSize;
270 pPayload->verification = BURN_PAYLOAD_VERIFICATION_UPDATE_BUNDLE;
271
272 hr = StrAllocString(&pPayload->sczKey, wzId, 0);
273 ExitOnFailure(hr, "Failed to copy key for pseudo bundle payload.");
274
275 hr = StrAllocString(&pPayload->sczFilePath, wzFilePath, 0);
276 ExitOnFailure(hr, "Failed to copy filename for pseudo bundle.");
277
278 hr = StrAllocString(&pPayload->sczSourcePath, wzLocalSource, 0);
279 ExitOnFailure(hr, "Failed to copy local source path for pseudo bundle.");
280
281 if (wzDownloadSource && *wzDownloadSource)
282 {
283 hr = StrAllocString(&pPayload->downloadSource.sczUrl, wzDownloadSource, 0);
284 ExitOnFailure(hr, "Failed to copy download source for pseudo bundle.");
285 }
286
287 if (pbHash)
288 {
289 pPayload->pbHash = static_cast<BYTE*>(MemAlloc(cbHash, FALSE));
290 ExitOnNull(pPayload->pbHash, hr, E_OUTOFMEMORY, "Failed to allocate memory for update bundle payload hash.");
291
292 pPayload->cbHash = cbHash;
293 memcpy_s(pPayload->pbHash, pPayload->cbHash, pbHash, cbHash);
294 }
295
296 pPackage->Exe.fPseudoBundle = TRUE;
297
298 pPackage->type = BURN_PACKAGE_TYPE_EXE;
299 pPackage->currentState = BOOTSTRAPPER_PACKAGE_STATE_ABSENT;
300 pPackage->qwInstallSize = qwSize;
301 pPackage->qwSize = qwSize;
302 pPackage->fVital = TRUE;
303
304 hr = StrAllocString(&pPackage->sczId, wzId, 0);
305 ExitOnFailure(hr, "Failed to copy id for update bundle.");
306
307 hr = StrAllocString(&pPackage->sczCacheId, wzCacheId, 0);
308 ExitOnFailure(hr, "Failed to copy cache id for update bundle.");
309
310 hr = StrAllocString(&pPackage->Exe.sczInstallArguments, wzInstallArguments, 0);
311 ExitOnFailure(hr, "Failed to copy install arguments for update bundle package");
312
313 // Assume the update bundle has the same engine version as this one.
314 pPackage->Exe.protocol = BURN_EXE_PROTOCOL_TYPE_BURN;
315 pPackage->Exe.fSupportsAncestors = TRUE;
316
317LExit:
318 return hr;
319} \ No newline at end of file