aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/burnextension.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-06-09 11:30:46 -0500
committerSean Hall <r.sean.hall@gmail.com>2021-06-09 13:47:53 -0500
commit56105916271ff9a7c0bfa237b45b9b3fab9c570b (patch)
tree828aff9543e541b42ed45198e6bd3e0aa065c137 /src/burn/engine/burnextension.cpp
parentd47c73dbcd0a314cf3346b9b1294063ed4a124c4 (diff)
downloadwix-56105916271ff9a7c0bfa237b45b9b3fab9c570b.tar.gz
wix-56105916271ff9a7c0bfa237b45b9b3fab9c570b.tar.bz2
wix-56105916271ff9a7c0bfa237b45b9b3fab9c570b.zip
Fix building and perf for bundles with 1000s of package and BA payloads
Fixes other half of #5300
Diffstat (limited to 'src/burn/engine/burnextension.cpp')
-rw-r--r--src/burn/engine/burnextension.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/burn/engine/burnextension.cpp b/src/burn/engine/burnextension.cpp
index 475df1c5..ee4b1542 100644
--- a/src/burn/engine/burnextension.cpp
+++ b/src/burn/engine/burnextension.cpp
@@ -26,6 +26,7 @@ EXTERN_C HRESULT BurnExtensionParseFromXml(
26 IXMLDOMNodeList* pixnNodes = NULL; 26 IXMLDOMNodeList* pixnNodes = NULL;
27 IXMLDOMNode* pixnNode = NULL; 27 IXMLDOMNode* pixnNode = NULL;
28 DWORD cNodes = 0; 28 DWORD cNodes = 0;
29 LPWSTR scz = NULL;
29 30
30 // Select BundleExtension nodes. 31 // Select BundleExtension nodes.
31 hr = XmlSelectNodes(pixnBundle, L"BundleExtension", &pixnNodes); 32 hr = XmlSelectNodes(pixnBundle, L"BundleExtension", &pixnNodes);
@@ -59,11 +60,11 @@ EXTERN_C HRESULT BurnExtensionParseFromXml(
59 ExitOnFailure(hr, "Failed to get @Id."); 60 ExitOnFailure(hr, "Failed to get @Id.");
60 61
61 // @EntryPayloadId 62 // @EntryPayloadId
62 hr = XmlGetAttributeEx(pixnNode, L"EntryPayloadId", &pExtension->sczEntryPayloadId); 63 hr = XmlGetAttributeEx(pixnNode, L"EntryPayloadSourcePath", &scz);
63 ExitOnFailure(hr, "Failed to get @EntryPayloadId."); 64 ExitOnFailure(hr, "Failed to get @EntryPayloadSourcePath.");
64 65
65 hr = PayloadFindById(pBaPayloads, pExtension->sczEntryPayloadId, &pExtension->pEntryPayload); 66 hr = PayloadFindEmbeddedBySourcePath(pBaPayloads->sdhPayloads, scz, &pExtension->pEntryPayload);
66 ExitOnFailure(hr, "Failed to find BundleExtension EntryPayload '%ls'.", pExtension->sczEntryPayloadId); 67 ExitOnFailure(hr, "Failed to find BundleExtension EntryPayload '%ls'.", pExtension->sczId);
67 68
68 // prepare next iteration 69 // prepare next iteration
69 ReleaseNullObject(pixnNode); 70 ReleaseNullObject(pixnNode);
@@ -72,6 +73,7 @@ EXTERN_C HRESULT BurnExtensionParseFromXml(
72 hr = S_OK; 73 hr = S_OK;
73 74
74LExit: 75LExit:
76 ReleaseStr(scz);
75 ReleaseObject(pixnNode); 77 ReleaseObject(pixnNode);
76 ReleaseObject(pixnNodes); 78 ReleaseObject(pixnNodes);
77 79
@@ -92,7 +94,6 @@ EXTERN_C void BurnExtensionUninitialize(
92 { 94 {
93 BURN_EXTENSION* pExtension = &pBurnExtensions->rgExtensions[i]; 95 BURN_EXTENSION* pExtension = &pBurnExtensions->rgExtensions[i];
94 96
95 ReleaseStr(pExtension->sczEntryPayloadId);
96 ReleaseStr(pExtension->sczId); 97 ReleaseStr(pExtension->sczId);
97 } 98 }
98 MemFree(pBurnExtensions->rgExtensions); 99 MemFree(pBurnExtensions->rgExtensions);