diff options
Diffstat (limited to 'src/burn/engine/package.cpp')
-rw-r--r-- | src/burn/engine/package.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/burn/engine/package.cpp b/src/burn/engine/package.cpp index 8a80194e..89203ada 100644 --- a/src/burn/engine/package.cpp +++ b/src/burn/engine/package.cpp | |||
@@ -87,7 +87,7 @@ extern "C" HRESULT PackagesParseFromXml( | |||
87 | ReleaseNullObject(pixnNodes); // done with the RollbackBoundary elements. | 87 | ReleaseNullObject(pixnNodes); // done with the RollbackBoundary elements. |
88 | 88 | ||
89 | // select package nodes | 89 | // select package nodes |
90 | hr = XmlSelectNodes(pixnBundle, L"Chain/ExePackage|Chain/MsiPackage|Chain/MspPackage|Chain/MsuPackage", &pixnNodes); | 90 | hr = XmlSelectNodes(pixnBundle, L"Chain/BundlePackage|Chain/ExePackage|Chain/MsiPackage|Chain/MspPackage|Chain/MsuPackage", &pixnNodes); |
91 | ExitOnFailure(hr, "Failed to select package nodes."); | 91 | ExitOnFailure(hr, "Failed to select package nodes."); |
92 | 92 | ||
93 | // get package node count | 93 | // get package node count |
@@ -199,7 +199,14 @@ extern "C" HRESULT PackagesParseFromXml( | |||
199 | } | 199 | } |
200 | 200 | ||
201 | // read type specific attributes | 201 | // read type specific attributes |
202 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"ExePackage", -1)) | 202 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"BundlePackage", -1)) |
203 | { | ||
204 | pPackage->type = BURN_PACKAGE_TYPE_BUNDLE; | ||
205 | |||
206 | hr = BundlePackageEngineParsePackageFromXml(pixnNode, pPackage); // TODO: Modularization | ||
207 | ExitOnFailure(hr, "Failed to parse BUNDLE package."); | ||
208 | } | ||
209 | else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"ExePackage", -1)) | ||
203 | { | 210 | { |
204 | pPackage->type = BURN_PACKAGE_TYPE_EXE; | 211 | pPackage->type = BURN_PACKAGE_TYPE_EXE; |
205 | 212 | ||
@@ -231,7 +238,7 @@ extern "C" HRESULT PackagesParseFromXml( | |||
231 | } | 238 | } |
232 | else | 239 | else |
233 | { | 240 | { |
234 | // ignore other package types for now | 241 | ExitWithRootFailure(hr, E_UNEXPECTED, "Invalid package type: %ls", bstrNodeName); |
235 | } | 242 | } |
236 | 243 | ||
237 | if (!pPackage->fPermanent) | 244 | if (!pPackage->fPermanent) |
@@ -371,7 +378,7 @@ extern "C" void PackageUninitialize( | |||
371 | switch (pPackage->type) | 378 | switch (pPackage->type) |
372 | { | 379 | { |
373 | case BURN_PACKAGE_TYPE_BUNDLE: | 380 | case BURN_PACKAGE_TYPE_BUNDLE: |
374 | BundlePackageEnginePackageUninitialize(pPackage); | 381 | BundlePackageEnginePackageUninitialize(pPackage); // TODO: Modularization |
375 | break; | 382 | break; |
376 | case BURN_PACKAGE_TYPE_EXE: | 383 | case BURN_PACKAGE_TYPE_EXE: |
377 | ExeEnginePackageUninitialize(pPackage); // TODO: Modularization | 384 | ExeEnginePackageUninitialize(pPackage); // TODO: Modularization |
@@ -648,7 +655,6 @@ static HRESULT ParsePatchTargetCode( | |||
648 | IXMLDOMNodeList* pixnNodes = NULL; | 655 | IXMLDOMNodeList* pixnNodes = NULL; |
649 | IXMLDOMNode* pixnNode = NULL; | 656 | IXMLDOMNode* pixnNode = NULL; |
650 | DWORD cNodes = 0; | 657 | DWORD cNodes = 0; |
651 | BSTR bstrNodeText = NULL; | ||
652 | BOOL fProduct; | 658 | BOOL fProduct; |
653 | 659 | ||
654 | hr = XmlSelectNodes(pixnBundle, L"PatchTargetCode", &pixnNodes); | 660 | hr = XmlSelectNodes(pixnBundle, L"PatchTargetCode", &pixnNodes); |
@@ -688,12 +694,10 @@ static HRESULT ParsePatchTargetCode( | |||
688 | pTargetCode->type = fProduct ? BURN_PATCH_TARGETCODE_TYPE_PRODUCT : BURN_PATCH_TARGETCODE_TYPE_UPGRADE; | 694 | pTargetCode->type = fProduct ? BURN_PATCH_TARGETCODE_TYPE_PRODUCT : BURN_PATCH_TARGETCODE_TYPE_UPGRADE; |
689 | 695 | ||
690 | // prepare next iteration | 696 | // prepare next iteration |
691 | ReleaseNullBSTR(bstrNodeText); | ||
692 | ReleaseNullObject(pixnNode); | 697 | ReleaseNullObject(pixnNode); |
693 | } | 698 | } |
694 | 699 | ||
695 | LExit: | 700 | LExit: |
696 | ReleaseBSTR(bstrNodeText); | ||
697 | ReleaseObject(pixnNode); | 701 | ReleaseObject(pixnNode); |
698 | ReleaseObject(pixnNodes); | 702 | ReleaseObject(pixnNodes); |
699 | 703 | ||