From a1307cd4e76a89598c53cb68309358a7012db553 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Fri, 9 Sep 2022 16:03:29 -0500 Subject: Move `Bundle/@CommandLineVariables` into Bal.wixext. Implements 6858 --- src/burn/engine/core.cpp | 12 +---- src/burn/engine/variable.cpp | 51 ++++++++++++---------- src/burn/engine/variable.h | 11 ++--- src/burn/test/BurnUnitTest/ManifestTest.cpp | 1 - src/burn/test/BurnUnitTest/RegistrationTest.cpp | 2 - .../BasicFunctionality_BundleA_manifest.xml | 2 +- .../PlanTest/BundlePackage_Multiple_manifest.xml | 2 +- .../ExePackage_PerUserArpEntry_manifest.xml | 2 +- .../TestData/PlanTest/Failure_BundleD_manifest.xml | 2 +- .../PlanTest/MsiTransaction_BundleAv1_manifest.xml | 2 +- .../PlanTest/MsuPackageFixture_manifest.xml | 2 +- .../PlanTest/Slipstream_BundleA_manifest.xml | 2 +- .../Slipstream_BundleA_modified_manifest.xml | 2 +- src/burn/test/BurnUnitTest/VariableTest.cpp | 10 ++--- 14 files changed, 46 insertions(+), 57 deletions(-) (limited to 'src/burn') diff --git a/src/burn/engine/core.cpp b/src/burn/engine/core.cpp index 93b9c002..c443e0c8 100644 --- a/src/burn/engine/core.cpp +++ b/src/burn/engine/core.cpp @@ -2203,18 +2203,10 @@ static HRESULT GetSanitizedCommandLine( const wchar_t* pwc = wcschr(argv[i], L'='); if (pwc) { - if (BURN_VARIABLE_COMMAND_LINE_TYPE_UPPER_CASE == pVariables->commandLineType) - { - hr = StrAllocStringToUpperInvariant(&sczVariableName, argv[i], pwc - argv[i]); - } - else - { - hr = StrAllocString(&sczVariableName, argv[i], pwc - argv[i]); - } + hr = StrAllocString(&sczVariableName, argv[i], pwc - argv[i]); ExitOnFailure(hr, "Failed to copy variable name."); - hr = VariableIsHidden(pVariables, sczVariableName, &fHidden); - ExitOnFailure(hr, "Failed to determine whether variable is hidden."); + fHidden = VariableIsHiddenCommandLine(pVariables, sczVariableName); if (fHidden) { diff --git a/src/burn/engine/variable.cpp b/src/burn/engine/variable.cpp index 3947e29e..9b6fecaf 100644 --- a/src/burn/engine/variable.cpp +++ b/src/burn/engine/variable.cpp @@ -342,7 +342,6 @@ extern "C" HRESULT VariablesParseFromXml( { HRESULT hr = S_OK; BOOL fXmlFound = FALSE; - IXMLDOMNode* pixnCommandLine = NULL; IXMLDOMNodeList* pixnNodes = NULL; IXMLDOMNode* pixnNode = NULL; DWORD cNodes = 0; @@ -356,27 +355,6 @@ extern "C" HRESULT VariablesParseFromXml( ::EnterCriticalSection(&pVariables->csAccess); - // select command-line node - hr = XmlSelectSingleNode(pixnBundle, L"CommandLine", &pixnCommandLine); - ExitOnRequiredXmlQueryFailure(hr, "Failed to select CommandLine node."); - - // @Variables - hr = XmlGetAttributeEx(pixnCommandLine, L"Variables", &scz); - ExitOnRequiredXmlQueryFailure(hr, "Failed to get CommandLine/@Variables."); - - if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"upperCase", -1)) - { - pVariables->commandLineType = BURN_VARIABLE_COMMAND_LINE_TYPE_UPPER_CASE; - } - else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"caseSensitive", -1)) - { - pVariables->commandLineType = BURN_VARIABLE_COMMAND_LINE_TYPE_CASE_SENSITIVE; - } - else - { - ExitWithRootFailure(hr, E_INVALIDARG, "Invalid value for CommandLine/@Variables: %ls", scz); - } - // select variable nodes hr = XmlSelectNodes(pixnBundle, L"Variable", &pixnNodes); ExitOnFailure(hr, "Failed to select variable nodes."); @@ -507,7 +485,6 @@ extern "C" HRESULT VariablesParseFromXml( LExit: ::LeaveCriticalSection(&pVariables->csAccess); - ReleaseObject(pixnCommandLine); ReleaseObject(pixnNodes); ReleaseObject(pixnNode); ReleaseStr(scz); @@ -1150,6 +1127,32 @@ LExit: return hr; } +extern "C" BOOL VariableIsHiddenCommandLine( + __in BURN_VARIABLES* pVariables, + __in_z LPCWSTR wzVariable + ) +{ + BURN_VARIABLE* pVariable = NULL; + BOOL fHidden = FALSE; + + ::EnterCriticalSection(&pVariables->csAccess); + + for (DWORD i = 0; i < pVariables->cVariables; ++i) + { + pVariable = pVariables->rgVariables + i; + + if (pVariable->fHidden && CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, pVariable->sczName, -1, wzVariable, -1)) + { + fHidden = TRUE; + break; + } + } + + ::LeaveCriticalSection(&pVariables->csAccess); + + return fHidden; +} + // internal function definitions @@ -1587,7 +1590,7 @@ static HRESULT InsertUserVariable( if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, wzVariable, 3, L"Wix", 3)) { - ExitWithRootFailure(hr, E_INVALIDARG, "Attempted to insert variable with reserved prefix: %ls", wzVariable); + ExitWithRootFailure(hr, E_INVALIDARG, "Attempted to insert variable with reserved prefix: %ls", wzVariable); } hr = InsertVariable(pVariables, wzVariable, iPosition); diff --git a/src/burn/engine/variable.h b/src/burn/engine/variable.h index f8d3e1e2..309d7ab9 100644 --- a/src/burn/engine/variable.h +++ b/src/burn/engine/variable.h @@ -26,12 +26,6 @@ typedef HRESULT (*PFN_INITIALIZEVARIABLE)( // constants -enum BURN_VARIABLE_COMMAND_LINE_TYPE -{ - BURN_VARIABLE_COMMAND_LINE_TYPE_UPPER_CASE, - BURN_VARIABLE_COMMAND_LINE_TYPE_CASE_SENSITIVE, -}; - enum BURN_VARIABLE_INTERNAL_TYPE { BURN_VARIABLE_INTERNAL_TYPE_NORMAL, // the BA can set this variable. @@ -61,7 +55,6 @@ typedef struct _BURN_VARIABLES DWORD dwMaxVariables; DWORD cVariables; BURN_VARIABLE* rgVariables; - BURN_VARIABLE_COMMAND_LINE_TYPE commandLineType; } BURN_VARIABLES; @@ -187,6 +180,10 @@ HRESULT VariableIsHidden( __in_z LPCWSTR wzVariable, __out BOOL* pfHidden ); +BOOL VariableIsHiddenCommandLine( + __in BURN_VARIABLES* pVariables, + __in_z LPCWSTR wzVariable + ); #if defined(__cplusplus) } diff --git a/src/burn/test/BurnUnitTest/ManifestTest.cpp b/src/burn/test/BurnUnitTest/ManifestTest.cpp index 5e2725bf..67e9c25f 100644 --- a/src/burn/test/BurnUnitTest/ManifestTest.cpp +++ b/src/burn/test/BurnUnitTest/ManifestTest.cpp @@ -43,7 +43,6 @@ namespace Bootstrapper " " "