diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2022-03-30 17:08:40 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2022-04-01 22:06:11 -0500 |
| commit | 386a3578413ba16b3c0615d47870ee44a0e461f6 (patch) | |
| tree | 1dfcea9e5080f1f15cc880aba1541a962426c58b /src/burn/engine/package.cpp | |
| parent | d97c0d1685ef4c3840776327e76ce25d4dbdbeb1 (diff) | |
| download | wix-386a3578413ba16b3c0615d47870ee44a0e461f6.tar.gz wix-386a3578413ba16b3c0615d47870ee44a0e461f6.tar.bz2 wix-386a3578413ba16b3c0615d47870ee44a0e461f6.zip | |
Implement BundlePackage.
3693
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 | ||
