diff options
Diffstat (limited to 'src/api/burn/balutil/balinfo.cpp')
-rw-r--r-- | src/api/burn/balutil/balinfo.cpp | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/src/api/burn/balutil/balinfo.cpp b/src/api/burn/balutil/balinfo.cpp index f71784a5..2746f49e 100644 --- a/src/api/burn/balutil/balinfo.cpp +++ b/src/api/burn/balutil/balinfo.cpp | |||
@@ -19,7 +19,7 @@ static HRESULT ParseOverridableVariablesFromXml( | |||
19 | 19 | ||
20 | DAPI_(HRESULT) BalInfoParseCommandLine( | 20 | DAPI_(HRESULT) BalInfoParseCommandLine( |
21 | __in BAL_INFO_COMMAND* pCommand, | 21 | __in BAL_INFO_COMMAND* pCommand, |
22 | __in LPCWSTR wzCommandLine | 22 | __in const BOOTSTRAPPER_COMMAND* pBootstrapperCommand |
23 | ) | 23 | ) |
24 | { | 24 | { |
25 | HRESULT hr = S_OK; | 25 | HRESULT hr = S_OK; |
@@ -29,13 +29,13 @@ DAPI_(HRESULT) BalInfoParseCommandLine( | |||
29 | 29 | ||
30 | BalInfoUninitializeCommandLine(pCommand); | 30 | BalInfoUninitializeCommandLine(pCommand); |
31 | 31 | ||
32 | if (!wzCommandLine || !*wzCommandLine) | 32 | if (!pBootstrapperCommand->wzCommandLine || !*pBootstrapperCommand->wzCommandLine) |
33 | { | 33 | { |
34 | ExitFunction(); | 34 | ExitFunction(); |
35 | } | 35 | } |
36 | 36 | ||
37 | hr = AppParseCommandLine(wzCommandLine, &argc, &argv); | 37 | hr = AppParseCommandLine(pBootstrapperCommand->wzCommandLine, &argc, &argv); |
38 | ExitOnFailure(hr, "Failed to parse command line."); | 38 | BalExitOnFailure(hr, "Failed to parse command line."); |
39 | 39 | ||
40 | for (int i = 0; i < argc; ++i) | 40 | for (int i = 0; i < argc; ++i) |
41 | { | 41 | { |
@@ -43,7 +43,24 @@ DAPI_(HRESULT) BalInfoParseCommandLine( | |||
43 | 43 | ||
44 | if (argv[i][0] == L'-' || argv[i][0] == L'/') | 44 | if (argv[i][0] == L'-' || argv[i][0] == L'/') |
45 | { | 45 | { |
46 | fUnknownArg = TRUE; | 46 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, &argv[i][1], -1, L"norestart", -1)) |
47 | { | ||
48 | if (BAL_INFO_RESTART_UNKNOWN == pCommand->restart) | ||
49 | { | ||
50 | pCommand->restart = BAL_INFO_RESTART_NEVER; | ||
51 | } | ||
52 | } | ||
53 | else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, &argv[i][1], -1, L"forcerestart", -1)) | ||
54 | { | ||
55 | if (BAL_INFO_RESTART_UNKNOWN == pCommand->restart) | ||
56 | { | ||
57 | pCommand->restart = BAL_INFO_RESTART_ALWAYS; | ||
58 | } | ||
59 | } | ||
60 | else | ||
61 | { | ||
62 | fUnknownArg = TRUE; | ||
63 | } | ||
47 | } | 64 | } |
48 | else | 65 | else |
49 | { | 66 | { |
@@ -55,10 +72,10 @@ DAPI_(HRESULT) BalInfoParseCommandLine( | |||
55 | else | 72 | else |
56 | { | 73 | { |
57 | hr = MemEnsureArraySizeForNewItems(reinterpret_cast<LPVOID*>(&pCommand->rgVariableNames), pCommand->cVariables, 1, sizeof(LPWSTR), 5); | 74 | hr = MemEnsureArraySizeForNewItems(reinterpret_cast<LPVOID*>(&pCommand->rgVariableNames), pCommand->cVariables, 1, sizeof(LPWSTR), 5); |
58 | ExitOnFailure(hr, "Failed to ensure size for variable names."); | 75 | BalExitOnFailure(hr, "Failed to ensure size for variable names."); |
59 | 76 | ||
60 | hr = MemEnsureArraySizeForNewItems(reinterpret_cast<LPVOID*>(&pCommand->rgVariableValues), pCommand->cVariables, 1, sizeof(LPWSTR), 5); | 77 | hr = MemEnsureArraySizeForNewItems(reinterpret_cast<LPVOID*>(&pCommand->rgVariableValues), pCommand->cVariables, 1, sizeof(LPWSTR), 5); |
61 | ExitOnFailure(hr, "Failed to ensure size for variable values."); | 78 | BalExitOnFailure(hr, "Failed to ensure size for variable values."); |
62 | 79 | ||
63 | LPWSTR* psczVariableName = pCommand->rgVariableNames + pCommand->cVariables; | 80 | LPWSTR* psczVariableName = pCommand->rgVariableNames + pCommand->cVariables; |
64 | LPWSTR* psczVariableValue = pCommand->rgVariableValues + pCommand->cVariables; | 81 | LPWSTR* psczVariableValue = pCommand->rgVariableValues + pCommand->cVariables; |
@@ -86,6 +103,11 @@ DAPI_(HRESULT) BalInfoParseCommandLine( | |||
86 | } | 103 | } |
87 | 104 | ||
88 | LExit: | 105 | LExit: |
106 | if (BAL_INFO_RESTART_UNKNOWN == pCommand->restart) | ||
107 | { | ||
108 | pCommand->restart = BOOTSTRAPPER_DISPLAY_FULL > pBootstrapperCommand->display ? BAL_INFO_RESTART_AUTOMATIC : BAL_INFO_RESTART_PROMPT; | ||
109 | } | ||
110 | |||
89 | if (argv) | 111 | if (argv) |
90 | { | 112 | { |
91 | AppFreeCommandLineArgs(argv); | 113 | AppFreeCommandLineArgs(argv); |