aboutsummaryrefslogtreecommitdiff
path: root/src/api/burn/balutil/balinfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/burn/balutil/balinfo.cpp')
-rw-r--r--src/api/burn/balutil/balinfo.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/api/burn/balutil/balinfo.cpp b/src/api/burn/balutil/balinfo.cpp
index 5927ef72..f71784a5 100644
--- a/src/api/burn/balutil/balinfo.cpp
+++ b/src/api/burn/balutil/balinfo.cpp
@@ -292,6 +292,7 @@ DAPI_(HRESULT) BalSetOverridableVariablesFromEngine(
292 ) 292 )
293{ 293{
294 HRESULT hr = S_OK; 294 HRESULT hr = S_OK;
295 LPWSTR sczKey = NULL;
295 BAL_INFO_OVERRIDABLE_VARIABLE* pOverridableVariable = NULL; 296 BAL_INFO_OVERRIDABLE_VARIABLE* pOverridableVariable = NULL;
296 297
297 for (DWORD i = 0; i < pCommand->cVariables; ++i) 298 for (DWORD i = 0; i < pCommand->cVariables; ++i)
@@ -299,6 +300,14 @@ DAPI_(HRESULT) BalSetOverridableVariablesFromEngine(
299 LPCWSTR wzVariableName = pCommand->rgVariableNames[i]; 300 LPCWSTR wzVariableName = pCommand->rgVariableNames[i];
300 LPCWSTR wzVariableValue = pCommand->rgVariableValues[i]; 301 LPCWSTR wzVariableValue = pCommand->rgVariableValues[i];
301 302
303 if (BAL_INFO_VARIABLE_COMMAND_LINE_TYPE_UPPER_CASE == pOverridableVariables->commandLineType)
304 {
305 hr = StrAllocStringToUpperInvariant(&sczKey, wzVariableName, 0);
306 ExitOnFailure(hr, "Failed to upper case variable name.");
307
308 wzVariableName = sczKey;
309 }
310
302 hr = DictGetValue(pOverridableVariables->sdVariables, wzVariableName, reinterpret_cast<void**>(&pOverridableVariable)); 311 hr = DictGetValue(pOverridableVariables->sdVariables, wzVariableName, reinterpret_cast<void**>(&pOverridableVariable));
303 if (E_NOTFOUND == hr) 312 if (E_NOTFOUND == hr)
304 { 313 {
@@ -313,6 +322,8 @@ DAPI_(HRESULT) BalSetOverridableVariablesFromEngine(
313 } 322 }
314 323
315LExit: 324LExit:
325 ReleaseStr(sczKey);
326
316 return hr; 327 return hr;
317} 328}
318 329
@@ -527,10 +538,37 @@ static HRESULT ParseOverridableVariablesFromXml(
527 ) 538 )
528{ 539{
529 HRESULT hr = S_OK; 540 HRESULT hr = S_OK;
541 IXMLDOMNode* pCommandLineNode = NULL;
542 LPWSTR scz = NULL;
530 IXMLDOMNode* pNode = NULL; 543 IXMLDOMNode* pNode = NULL;
531 IXMLDOMNodeList* pNodes = NULL; 544 IXMLDOMNodeList* pNodes = NULL;
532 BAL_INFO_OVERRIDABLE_VARIABLE* pOverridableVariable = NULL; 545 BAL_INFO_OVERRIDABLE_VARIABLE* pOverridableVariable = NULL;
533 546
547 hr = XmlSelectSingleNode(pixdManifest, L"/BootstrapperApplicationData/CommandLine", &pCommandLineNode);
548 if (S_FALSE == hr)
549 {
550 hr = E_NOTFOUND;
551 }
552 ExitOnFailure(hr, "Failed to select command line information.");
553
554 // @Variables
555 hr = XmlGetAttributeEx(pCommandLineNode, L"Variables", &scz);
556 ExitOnFailure(hr, "Failed to get command line variable type.");
557
558 if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"upperCase", -1))
559 {
560 pOverridableVariables->commandLineType = BAL_INFO_VARIABLE_COMMAND_LINE_TYPE_UPPER_CASE;
561 }
562 else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"caseSensitive", -1))
563 {
564 pOverridableVariables->commandLineType = BAL_INFO_VARIABLE_COMMAND_LINE_TYPE_CASE_SENSITIVE;
565 }
566 else
567 {
568 hr = E_INVALIDARG;
569 ExitOnFailure(hr, "Invalid value for CommandLine/@Variables: %ls", scz);
570 }
571
534 // Get the list of variables users can override on the command line. 572 // Get the list of variables users can override on the command line.
535 hr = XmlSelectNodes(pixdManifest, L"/BootstrapperApplicationData/WixStdbaOverridableVariable", &pNodes); 573 hr = XmlSelectNodes(pixdManifest, L"/BootstrapperApplicationData/WixStdbaOverridableVariable", &pNodes);
536 if (S_FALSE == hr) 574 if (S_FALSE == hr)
@@ -570,6 +608,8 @@ static HRESULT ParseOverridableVariablesFromXml(
570 } 608 }
571 609
572LExit: 610LExit:
611 ReleaseStr(scz);
612 ReleaseObject(pCommandLineNode);
573 ReleaseObject(pNode); 613 ReleaseObject(pNode);
574 ReleaseObject(pNodes); 614 ReleaseObject(pNodes);
575 return hr; 615 return hr;