diff options
author | Nir Bar <nir.bar@panel-sw.co.il> | 2023-06-05 13:27:56 +0300 |
---|---|---|
committer | Bob Arnson <github@bobs.org> | 2024-01-20 22:27:41 -0500 |
commit | dfea4478a4938ce738fd49282350d36c73fb9a35 (patch) | |
tree | 8445e774b7a79a76f239ed523c6689f445961da2 /src/burn/engine/core.cpp | |
parent | cde596e1bb9288f8cebb447a5f8cb79ca684cfe1 (diff) | |
download | wix-dfea4478a4938ce738fd49282350d36c73fb9a35.tar.gz wix-dfea4478a4938ce738fd49282350d36c73fb9a35.tar.bz2 wix-dfea4478a4938ce738fd49282350d36c73fb9a35.zip |
Fixes wixtoolset/issues#5220: Automatically add logging flag for any burn ExePackage, BundlePackage, and related bundles
Diffstat (limited to 'src/burn/engine/core.cpp')
-rw-r--r-- | src/burn/engine/core.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/burn/engine/core.cpp b/src/burn/engine/core.cpp index 6d6d99d5..ca2e41c2 100644 --- a/src/burn/engine/core.cpp +++ b/src/burn/engine/core.cpp | |||
@@ -1301,6 +1301,66 @@ LExit: | |||
1301 | return hr; | 1301 | return hr; |
1302 | } | 1302 | } |
1303 | 1303 | ||
1304 | HRESULT CoreAppendLogToCommandLine( | ||
1305 | __deref_inout_z LPWSTR* psczCommandLine, | ||
1306 | __deref_inout_z_opt LPWSTR* psczObfuscatedCommandLine, | ||
1307 | __in BOOL fRollback, | ||
1308 | __in BURN_VARIABLES* pVariables, | ||
1309 | __in BURN_PACKAGE *pPackage | ||
1310 | ) | ||
1311 | { | ||
1312 | HRESULT hr = S_OK; | ||
1313 | INT ccArgs = 0; | ||
1314 | LPWSTR* rgszArgs = nullptr; | ||
1315 | LPWSTR szLogArg = nullptr; | ||
1316 | LPWSTR szLogArgFormatted = nullptr; | ||
1317 | LPCWSTR szLogVar = fRollback ? pPackage->sczRollbackLogPathVariable : pPackage->sczLogPathVariable; | ||
1318 | |||
1319 | if (!szLogVar || !*szLogVar) | ||
1320 | { | ||
1321 | ExitFunction1(hr = S_FALSE); | ||
1322 | } | ||
1323 | |||
1324 | hr = AppParseCommandLine(*psczCommandLine, &ccArgs, &rgszArgs); | ||
1325 | ExitOnFailure(hr, "Failed parsing command line"); | ||
1326 | |||
1327 | // Log flag already present? | ||
1328 | for (INT i = 0; i < ccArgs; ++i) | ||
1329 | { | ||
1330 | if (rgszArgs[i][0] == L'-' || rgszArgs[i][0] == L'/') | ||
1331 | { | ||
1332 | // Now looking for 'log' or 'l' | ||
1333 | if ((CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, &rgszArgs[i][1], -1, L"log", -1)) | ||
1334 | || (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, &rgszArgs[i][1], -1, L"l", -1))) | ||
1335 | { | ||
1336 | ExitFunction1(hr = S_FALSE); | ||
1337 | } | ||
1338 | } | ||
1339 | } | ||
1340 | |||
1341 | hr = StrAllocFormatted(&szLogArg, L" -log \"[%ls]\"", szLogVar); | ||
1342 | ExitOnFailure(hr, "Failed creating log argument"); | ||
1343 | |||
1344 | hr = VariableFormatString(pVariables, szLogArg, &szLogArgFormatted, NULL); | ||
1345 | ExitOnFailure(hr, "Failed to format argument string."); | ||
1346 | |||
1347 | hr = StrAllocConcat(psczCommandLine, szLogArgFormatted, 0); | ||
1348 | ExitOnFailure(hr, "Failed concatenating '-log' to command line"); | ||
1349 | |||
1350 | hr = StrAllocConcat(psczObfuscatedCommandLine, szLogArgFormatted, 0); | ||
1351 | ExitOnFailure(hr, "Failed concatenating '-log' to obfuscated command line"); | ||
1352 | |||
1353 | LExit: | ||
1354 | if (rgszArgs) | ||
1355 | { | ||
1356 | AppFreeCommandLineArgs(rgszArgs); | ||
1357 | } | ||
1358 | ReleaseStr(szLogArg); | ||
1359 | ReleaseStr(szLogArgFormatted); | ||
1360 | |||
1361 | return hr; | ||
1362 | } | ||
1363 | |||
1304 | extern "C" HRESULT CoreAppendSplashScreenWindowToCommandLine( | 1364 | extern "C" HRESULT CoreAppendSplashScreenWindowToCommandLine( |
1305 | __in_opt HWND hwndSplashScreen, | 1365 | __in_opt HWND hwndSplashScreen, |
1306 | __deref_inout_z LPWSTR* psczCommandLine | 1366 | __deref_inout_z LPWSTR* psczCommandLine |