summaryrefslogtreecommitdiff
path: root/src/api/burn/balutil/balinfo.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-05-13 13:49:57 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-05-14 11:12:31 -0500
commit7d56566b7c51c49ded526466dfae6af9e1709040 (patch)
treebda62f4cdd8c7318542d8f0ed20901cb41e1a271 /src/api/burn/balutil/balinfo.cpp
parent031991f32f059b64374e6d257cbe573304dd577f (diff)
downloadwix-7d56566b7c51c49ded526466dfae6af9e1709040.tar.gz
wix-7d56566b7c51c49ded526466dfae6af9e1709040.tar.bz2
wix-7d56566b7c51c49ded526466dfae6af9e1709040.zip
Update balutil and Bal.wixext to use more concise Exit* macros.
Diffstat (limited to 'src/api/burn/balutil/balinfo.cpp')
-rw-r--r--src/api/burn/balutil/balinfo.cpp105
1 files changed, 30 insertions, 75 deletions
diff --git a/src/api/burn/balutil/balinfo.cpp b/src/api/burn/balutil/balinfo.cpp
index 29e453f6..5832281f 100644
--- a/src/api/burn/balutil/balinfo.cpp
+++ b/src/api/burn/balutil/balinfo.cpp
@@ -123,29 +123,21 @@ DAPI_(HRESULT) BalInfoParseFromXml(
123{ 123{
124 HRESULT hr = S_OK; 124 HRESULT hr = S_OK;
125 IXMLDOMNode* pNode = NULL; 125 IXMLDOMNode* pNode = NULL;
126 BOOL fXmlFound = FALSE;
126 127
127 hr = XmlSelectSingleNode(pixdManifest, L"/BootstrapperApplicationData/WixBundleProperties", &pNode); 128 hr = XmlSelectSingleNode(pixdManifest, L"/BootstrapperApplicationData/WixBundleProperties", &pNode);
128 ExitOnFailure(hr, "Failed to select bundle information."); 129 BalExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to select bundle information.");
129 130
130 if (S_OK == hr) 131 if (fXmlFound)
131 { 132 {
132 hr = XmlGetYesNoAttribute(pNode, L"PerMachine", &pBundle->fPerMachine); 133 hr = XmlGetYesNoAttribute(pNode, L"PerMachine", &pBundle->fPerMachine);
133 if (E_NOTFOUND != hr) 134 BalExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to read bundle information per-machine.");
134 {
135 ExitOnFailure(hr, "Failed to read bundle information per-machine.");
136 }
137 135
138 hr = XmlGetAttributeEx(pNode, L"DisplayName", &pBundle->sczName); 136 hr = XmlGetAttributeEx(pNode, L"DisplayName", &pBundle->sczName);
139 if (E_NOTFOUND != hr) 137 BalExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to read bundle information display name.");
140 {
141 ExitOnFailure(hr, "Failed to read bundle information display name.");
142 }
143 138
144 hr = XmlGetAttributeEx(pNode, L"LogPathVariable", &pBundle->sczLogVariable); 139 hr = XmlGetAttributeEx(pNode, L"LogPathVariable", &pBundle->sczLogVariable);
145 if (E_NOTFOUND != hr) 140 BalExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to read bundle information log path variable.");
146 {
147 ExitOnFailure(hr, "Failed to read bundle information log path variable.");
148 }
149 } 141 }
150 142
151 hr = ParseOverridableVariablesFromXml(&pBundle->overridableVariables, pixdManifest); 143 hr = ParseOverridableVariablesFromXml(&pBundle->overridableVariables, pixdManifest);
@@ -192,7 +184,7 @@ DAPI_(HRESULT) BalInfoAddRelatedBundleAsPackage(
192 break; 184 break;
193 185
194 default: 186 default:
195 ExitOnFailure(hr = E_INVALIDARG, "Unknown related bundle type: %u", relationType); 187 ExitWithRootFailure(hr, E_INVALIDARG, "Unknown related bundle type: %u", relationType);
196 } 188 }
197 189
198 // Check to see if the bundle is already in the list of packages. 190 // Check to see if the bundle is already in the list of packages.
@@ -403,6 +395,7 @@ static HRESULT ParsePackagesFromXml(
403 BAL_INFO_PACKAGE* prgPackages = NULL; 395 BAL_INFO_PACKAGE* prgPackages = NULL;
404 DWORD cPackages = 0; 396 DWORD cPackages = 0;
405 LPWSTR scz = NULL; 397 LPWSTR scz = NULL;
398 BOOL fXmlFound = FALSE;
406 399
407 hr = XmlSelectNodes(pixdManifest, L"/BootstrapperApplicationData/WixPackageProperties", &pNodeList); 400 hr = XmlSelectNodes(pixdManifest, L"/BootstrapperApplicationData/WixPackageProperties", &pNodeList);
408 ExitOnFailure(hr, "Failed to select all packages."); 401 ExitOnFailure(hr, "Failed to select all packages.");
@@ -417,22 +410,16 @@ static HRESULT ParsePackagesFromXml(
417 while (S_OK == (hr = XmlNextElement(pNodeList, &pNode, NULL))) 410 while (S_OK == (hr = XmlNextElement(pNodeList, &pNode, NULL)))
418 { 411 {
419 hr = XmlGetAttributeEx(pNode, L"Package", &prgPackages[iPackage].sczId); 412 hr = XmlGetAttributeEx(pNode, L"Package", &prgPackages[iPackage].sczId);
420 ExitOnFailure(hr, "Failed to get package identifier for package."); 413 ExitOnRequiredXmlQueryFailure(hr, "Failed to get package identifier for package.");
421 414
422 hr = XmlGetAttributeEx(pNode, L"DisplayName", &prgPackages[iPackage].sczDisplayName); 415 hr = XmlGetAttributeEx(pNode, L"DisplayName", &prgPackages[iPackage].sczDisplayName);
423 if (E_NOTFOUND != hr) 416 ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get display name for package.");
424 {
425 ExitOnFailure(hr, "Failed to get display name for package.");
426 }
427 417
428 hr = XmlGetAttributeEx(pNode, L"Description", &prgPackages[iPackage].sczDescription); 418 hr = XmlGetAttributeEx(pNode, L"Description", &prgPackages[iPackage].sczDescription);
429 if (E_NOTFOUND != hr) 419 ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get description for package.");
430 {
431 ExitOnFailure(hr, "Failed to get description for package.");
432 }
433 420
434 hr = XmlGetAttributeEx(pNode, L"PackageType", &scz); 421 hr = XmlGetAttributeEx(pNode, L"PackageType", &scz);
435 ExitOnFailure(hr, "Failed to get package type for package."); 422 ExitOnRequiredXmlQueryFailure(hr, "Failed to get package type for package.");
436 423
437 if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, L"Bundle", -1, scz, -1)) 424 if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, L"Bundle", -1, scz, -1))
438 { 425 {
@@ -456,43 +443,28 @@ static HRESULT ParsePackagesFromXml(
456 } 443 }
457 444
458 hr = XmlGetYesNoAttribute(pNode, L"Permanent", &prgPackages[iPackage].fPermanent); 445 hr = XmlGetYesNoAttribute(pNode, L"Permanent", &prgPackages[iPackage].fPermanent);
459 ExitOnFailure(hr, "Failed to get permanent setting for package."); 446 ExitOnRequiredXmlQueryFailure(hr, "Failed to get permanent setting for package.");
460 447
461 hr = XmlGetYesNoAttribute(pNode, L"Vital", &prgPackages[iPackage].fVital); 448 hr = XmlGetYesNoAttribute(pNode, L"Vital", &prgPackages[iPackage].fVital);
462 ExitOnFailure(hr, "Failed to get vital setting for package."); 449 ExitOnRequiredXmlQueryFailure(hr, "Failed to get vital setting for package.");
463 450
464 hr = XmlGetAttributeEx(pNode, L"ProductCode", &prgPackages[iPackage].sczProductCode); 451 hr = XmlGetAttributeEx(pNode, L"ProductCode", &prgPackages[iPackage].sczProductCode);
465 if (E_NOTFOUND != hr) 452 ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get product code for package.");
466 {
467 ExitOnFailure(hr, "Failed to get product code for package.");
468 }
469 453
470 hr = XmlGetAttributeEx(pNode, L"UpgradeCode", &prgPackages[iPackage].sczUpgradeCode); 454 hr = XmlGetAttributeEx(pNode, L"UpgradeCode", &prgPackages[iPackage].sczUpgradeCode);
471 if (E_NOTFOUND != hr) 455 ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get upgrade code for package.");
472 {
473 ExitOnFailure(hr, "Failed to get upgrade code for package.");
474 }
475 456
476 hr = XmlGetAttributeEx(pNode, L"Version", &prgPackages[iPackage].sczVersion); 457 hr = XmlGetAttributeEx(pNode, L"Version", &prgPackages[iPackage].sczVersion);
477 if (E_NOTFOUND != hr) 458 ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get version for package.");
478 {
479 ExitOnFailure(hr, "Failed to get version for package.");
480 }
481 459
482 hr = XmlGetAttributeEx(pNode, L"InstallCondition", &prgPackages[iPackage].sczInstallCondition); 460 hr = XmlGetAttributeEx(pNode, L"InstallCondition", &prgPackages[iPackage].sczInstallCondition);
483 if (E_NOTFOUND != hr) 461 ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get install condition for package.");
484 {
485 ExitOnFailure(hr, "Failed to get install condition for package.");
486 }
487 462
488 hr = XmlGetAttributeEx(pNode, L"RepairCondition", &prgPackages[iPackage].sczRepairCondition); 463 hr = XmlGetAttributeEx(pNode, L"RepairCondition", &prgPackages[iPackage].sczRepairCondition);
489 if (E_NOTFOUND != hr) 464 ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get repair condition for package.");
490 {
491 ExitOnFailure(hr, "Failed to get repair condition for package.");
492 }
493 465
494 hr = XmlGetAttributeEx(pNode, L"Cache", &scz); 466 hr = XmlGetAttributeEx(pNode, L"Cache", &scz);
495 ExitOnFailure(hr, "Failed to get cache type for package."); 467 ExitOnRequiredXmlQueryFailure(hr, "Failed to get cache type for package.");
496 468
497 if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, scz, -1, L"remove", -1)) 469 if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, scz, -1, L"remove", -1))
498 { 470 {
@@ -541,6 +513,7 @@ static HRESULT ParseBalPackageInfoFromXml(
541 IXMLDOMNode* pNode = NULL; 513 IXMLDOMNode* pNode = NULL;
542 LPWSTR scz = NULL; 514 LPWSTR scz = NULL;
543 BAL_INFO_PACKAGE* pPackage = NULL; 515 BAL_INFO_PACKAGE* pPackage = NULL;
516 BOOL fXmlFound = FALSE;
544 517
545 hr = XmlSelectNodes(pixdManifest, L"/BootstrapperApplicationData/WixBalPackageInfo", &pNodeList); 518 hr = XmlSelectNodes(pixdManifest, L"/BootstrapperApplicationData/WixBalPackageInfo", &pNodeList);
546 ExitOnFailure(hr, "Failed to select all packages."); 519 ExitOnFailure(hr, "Failed to select all packages.");
@@ -548,16 +521,13 @@ static HRESULT ParseBalPackageInfoFromXml(
548 while (S_OK == (hr = XmlNextElement(pNodeList, &pNode, NULL))) 521 while (S_OK == (hr = XmlNextElement(pNodeList, &pNode, NULL)))
549 { 522 {
550 hr = XmlGetAttributeEx(pNode, L"PackageId", &scz); 523 hr = XmlGetAttributeEx(pNode, L"PackageId", &scz);
551 ExitOnFailure(hr, "Failed to get package identifier for WixBalPackageInfo."); 524 ExitOnRequiredXmlQueryFailure(hr, "Failed to get package identifier for WixBalPackageInfo.");
552 525
553 hr = BalInfoFindPackageById(pPackages, scz, &pPackage); 526 hr = BalInfoFindPackageById(pPackages, scz, &pPackage);
554 ExitOnFailure(hr, "Failed to find package specified in WixBalPackageInfo: %ls", scz); 527 ExitOnFailure(hr, "Failed to find package specified in WixBalPackageInfo: %ls", scz);
555 528
556 hr = XmlGetAttributeEx(pNode, L"DisplayInternalUICondition", &pPackage->sczDisplayInternalUICondition); 529 hr = XmlGetAttributeEx(pNode, L"DisplayInternalUICondition", &pPackage->sczDisplayInternalUICondition);
557 if (E_NOTFOUND != hr) 530 ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get DisplayInternalUICondition setting for package.");
558 {
559 ExitOnFailure(hr, "Failed to get DisplayInternalUICondition setting for package.");
560 }
561 531
562 ReleaseNullObject(pNode); 532 ReleaseNullObject(pNode);
563 } 533 }
@@ -569,7 +539,7 @@ static HRESULT ParseBalPackageInfoFromXml(
569 while (S_OK == (hr = XmlNextElement(pNodeList, &pNode, NULL))) 539 while (S_OK == (hr = XmlNextElement(pNodeList, &pNode, NULL)))
570 { 540 {
571 hr = XmlGetAttributeEx(pNode, L"PackageId", &scz); 541 hr = XmlGetAttributeEx(pNode, L"PackageId", &scz);
572 ExitOnFailure(hr, "Failed to get package identifier for WixMbaPrereqInformation."); 542 ExitOnRequiredXmlQueryFailure(hr, "Failed to get package identifier for WixMbaPrereqInformation.");
573 543
574 hr = BalInfoFindPackageById(pPackages, scz, &pPackage); 544 hr = BalInfoFindPackageById(pPackages, scz, &pPackage);
575 ExitOnFailure(hr, "Failed to find package specified in WixMbaPrereqInformation: %ls", scz); 545 ExitOnFailure(hr, "Failed to find package specified in WixMbaPrereqInformation: %ls", scz);
@@ -577,16 +547,10 @@ static HRESULT ParseBalPackageInfoFromXml(
577 pPackage->fPrereqPackage = TRUE; 547 pPackage->fPrereqPackage = TRUE;
578 548
579 hr = XmlGetAttributeEx(pNode, L"LicenseFile", &pPackage->sczPrereqLicenseFile); 549 hr = XmlGetAttributeEx(pNode, L"LicenseFile", &pPackage->sczPrereqLicenseFile);
580 if (E_NOTFOUND != hr) 550 ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get LicenseFile setting for prereq package.");
581 {
582 ExitOnFailure(hr, "Failed to get LicenseFile setting for prereq package.");
583 }
584 551
585 hr = XmlGetAttributeEx(pNode, L"LicenseUrl", &pPackage->sczPrereqLicenseUrl); 552 hr = XmlGetAttributeEx(pNode, L"LicenseUrl", &pPackage->sczPrereqLicenseUrl);
586 if (E_NOTFOUND != hr) 553 ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get LicenseUrl setting for prereq package.");
587 {
588 ExitOnFailure(hr, "Failed to get LicenseUrl setting for prereq package.");
589 }
590 554
591 ReleaseNullObject(pNode); 555 ReleaseNullObject(pNode);
592 } 556 }
@@ -619,15 +583,11 @@ static HRESULT ParseOverridableVariablesFromXml(
619 BAL_INFO_OVERRIDABLE_VARIABLE* pOverridableVariable = NULL; 583 BAL_INFO_OVERRIDABLE_VARIABLE* pOverridableVariable = NULL;
620 584
621 hr = XmlSelectSingleNode(pixdManifest, L"/BootstrapperApplicationData/CommandLine", &pCommandLineNode); 585 hr = XmlSelectSingleNode(pixdManifest, L"/BootstrapperApplicationData/CommandLine", &pCommandLineNode);
622 if (S_FALSE == hr) 586 ExitOnRequiredXmlQueryFailure(hr, "Failed to select command line information.");
623 {
624 hr = E_NOTFOUND;
625 }
626 ExitOnFailure(hr, "Failed to select command line information.");
627 587
628 // @Variables 588 // @Variables
629 hr = XmlGetAttributeEx(pCommandLineNode, L"Variables", &scz); 589 hr = XmlGetAttributeEx(pCommandLineNode, L"Variables", &scz);
630 ExitOnFailure(hr, "Failed to get command line variable type."); 590 ExitOnRequiredXmlQueryFailure(hr, "Failed to get command line variable type.");
631 591
632 if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"upperCase", -1)) 592 if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"upperCase", -1))
633 { 593 {
@@ -639,16 +599,11 @@ static HRESULT ParseOverridableVariablesFromXml(
639 } 599 }
640 else 600 else
641 { 601 {
642 hr = E_INVALIDARG; 602 ExitWithRootFailure(hr, E_INVALIDARG, "Invalid value for CommandLine/@Variables: %ls", scz);
643 ExitOnFailure(hr, "Invalid value for CommandLine/@Variables: %ls", scz);
644 } 603 }
645 604
646 // Get the list of variables users can override on the command line. 605 // Get the list of variables users can override on the command line.
647 hr = XmlSelectNodes(pixdManifest, L"/BootstrapperApplicationData/WixStdbaOverridableVariable", &pNodes); 606 hr = XmlSelectNodes(pixdManifest, L"/BootstrapperApplicationData/WixStdbaOverridableVariable", &pNodes);
648 if (S_FALSE == hr)
649 {
650 ExitFunction1(hr = S_OK);
651 }
652 ExitOnFailure(hr, "Failed to select overridable variable nodes."); 607 ExitOnFailure(hr, "Failed to select overridable variable nodes.");
653 608
654 hr = pNodes->get_length(reinterpret_cast<long*>(&pOverridableVariables->cVariables)); 609 hr = pNodes->get_length(reinterpret_cast<long*>(&pOverridableVariables->cVariables));
@@ -671,7 +626,7 @@ static HRESULT ParseOverridableVariablesFromXml(
671 626
672 // @Name 627 // @Name
673 hr = XmlGetAttributeEx(pNode, L"Name", &pOverridableVariable->sczName); 628 hr = XmlGetAttributeEx(pNode, L"Name", &pOverridableVariable->sczName);
674 ExitOnFailure(hr, "Failed to get name for overridable variable."); 629 ExitOnRequiredXmlQueryFailure(hr, "Failed to get name for overridable variable.");
675 630
676 hr = DictAddValue(pOverridableVariables->sdVariables, pOverridableVariable); 631 hr = DictAddValue(pOverridableVariables->sdVariables, pOverridableVariable);
677 ExitOnFailure(hr, "Failed to add \"%ls\" to the string dictionary.", pOverridableVariable->sczName); 632 ExitOnFailure(hr, "Failed to add \"%ls\" to the string dictionary.", pOverridableVariable->sczName);