aboutsummaryrefslogtreecommitdiff
path: root/src/api/burn/balutil
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/burn/balutil')
-rw-r--r--src/api/burn/balutil/balinfo.cpp40
-rw-r--r--src/api/burn/balutil/inc/balinfo.h7
2 files changed, 47 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;
diff --git a/src/api/burn/balutil/inc/balinfo.h b/src/api/burn/balutil/inc/balinfo.h
index 0fce35ec..07a1cbb7 100644
--- a/src/api/burn/balutil/inc/balinfo.h
+++ b/src/api/burn/balutil/inc/balinfo.h
@@ -18,6 +18,12 @@ typedef enum BAL_INFO_PACKAGE_TYPE
18 BAL_INFO_PACKAGE_TYPE_BUNDLE_PATCH, 18 BAL_INFO_PACKAGE_TYPE_BUNDLE_PATCH,
19} BAL_INFO_PACKAGE_TYPE; 19} BAL_INFO_PACKAGE_TYPE;
20 20
21typedef enum _BAL_INFO_VARIABLE_COMMAND_LINE_TYPE
22{
23 BAL_INFO_VARIABLE_COMMAND_LINE_TYPE_UPPER_CASE,
24 BAL_INFO_VARIABLE_COMMAND_LINE_TYPE_CASE_SENSITIVE,
25} BAL_INFO_VARIABLE_COMMAND_LINE_TYPE;
26
21 27
22typedef struct _BAL_INFO_PACKAGE 28typedef struct _BAL_INFO_PACKAGE
23{ 29{
@@ -58,6 +64,7 @@ typedef struct _BAL_INFO_OVERRIDABLE_VARIABLES
58 BAL_INFO_OVERRIDABLE_VARIABLE* rgVariables; 64 BAL_INFO_OVERRIDABLE_VARIABLE* rgVariables;
59 DWORD cVariables; 65 DWORD cVariables;
60 STRINGDICT_HANDLE sdVariables; 66 STRINGDICT_HANDLE sdVariables;
67 BAL_INFO_VARIABLE_COMMAND_LINE_TYPE commandLineType;
61} BAL_INFO_OVERRIDABLE_VARIABLES; 68} BAL_INFO_OVERRIDABLE_VARIABLES;
62 69
63 70