diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2020-10-18 16:01:24 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2020-10-24 20:07:21 -0500 |
commit | a0c40d5a1b8537a6338dacc27a88d236077ab785 (patch) | |
tree | 1dd1fed3eebe2d909f7dc10de94dd92b180f3c2f | |
parent | 60717700e175d38412559113c8a5388c954c7c91 (diff) | |
download | wix-a0c40d5a1b8537a6338dacc27a88d236077ab785.tar.gz wix-a0c40d5a1b8537a6338dacc27a88d236077ab785.tar.bz2 wix-a0c40d5a1b8537a6338dacc27a88d236077ab785.zip |
Allow unsetting version variables.
-rw-r--r-- | src/engine/EngineForApplication.cpp | 7 | ||||
-rw-r--r-- | src/engine/EngineForExtension.cpp | 7 | ||||
-rw-r--r-- | src/engine/variable.cpp | 15 | ||||
-rw-r--r-- | src/engine/variant.cpp | 29 |
4 files changed, 43 insertions, 15 deletions
diff --git a/src/engine/EngineForApplication.cpp b/src/engine/EngineForApplication.cpp index c5eb5467..87a0782c 100644 --- a/src/engine/EngineForApplication.cpp +++ b/src/engine/EngineForApplication.cpp | |||
@@ -583,8 +583,11 @@ static HRESULT BAEngineSetVariableVersion( | |||
583 | 583 | ||
584 | if (wzVariable && *wzVariable) | 584 | if (wzVariable && *wzVariable) |
585 | { | 585 | { |
586 | hr = VerParseVersion(wzValue, 0, FALSE, &pVersion); | 586 | if (wzValue) |
587 | ExitOnFailure(hr, "Failed to parse new version value."); | 587 | { |
588 | hr = VerParseVersion(wzValue, 0, FALSE, &pVersion); | ||
589 | ExitOnFailure(hr, "Failed to parse new version value."); | ||
590 | } | ||
588 | 591 | ||
589 | hr = VariableSetVersion(&pContext->pEngineState->variables, wzVariable, pVersion, FALSE); | 592 | hr = VariableSetVersion(&pContext->pEngineState->variables, wzVariable, pVersion, FALSE); |
590 | ExitOnFailure(hr, "Failed to set version variable."); | 593 | ExitOnFailure(hr, "Failed to set version variable."); |
diff --git a/src/engine/EngineForExtension.cpp b/src/engine/EngineForExtension.cpp index c165e2c2..585b74a4 100644 --- a/src/engine/EngineForExtension.cpp +++ b/src/engine/EngineForExtension.cpp | |||
@@ -273,8 +273,11 @@ static HRESULT BEEngineSetVariableVersion( | |||
273 | 273 | ||
274 | if (wzVariable && *wzVariable) | 274 | if (wzVariable && *wzVariable) |
275 | { | 275 | { |
276 | hr = VerParseVersion(wzValue, 0, FALSE, &pVersion); | 276 | if (wzValue) |
277 | ExitOnFailure(hr, "Failed to parse new version value."); | 277 | { |
278 | hr = VerParseVersion(wzValue, 0, FALSE, &pVersion); | ||
279 | ExitOnFailure(hr, "Failed to parse new version value."); | ||
280 | } | ||
278 | 281 | ||
279 | hr = VariableSetVersion(&pContext->pEngineState->variables, wzVariable, pVersion, FALSE); | 282 | hr = VariableSetVersion(&pContext->pEngineState->variables, wzVariable, pVersion, FALSE); |
280 | ExitOnFailure(hr, "Failed to set version variable."); | 283 | ExitOnFailure(hr, "Failed to set version variable."); |
diff --git a/src/engine/variable.cpp b/src/engine/variable.cpp index c2192346..3425b92c 100644 --- a/src/engine/variable.cpp +++ b/src/engine/variable.cpp | |||
@@ -1551,7 +1551,7 @@ static HRESULT SetVariableValue( | |||
1551 | case BURN_VARIANT_TYPE_NONE: | 1551 | case BURN_VARIANT_TYPE_NONE: |
1552 | if (BURN_VARIANT_TYPE_NONE != pVariables->rgVariables[iVariable].Value.Type) | 1552 | if (BURN_VARIANT_TYPE_NONE != pVariables->rgVariables[iVariable].Value.Type) |
1553 | { | 1553 | { |
1554 | LogStringLine(REPORT_STANDARD, "Unsetting variable '%ls'", wzVariable, pVariant->sczValue); | 1554 | LogStringLine(REPORT_STANDARD, "Unsetting variable '%ls'", wzVariable); |
1555 | } | 1555 | } |
1556 | break; | 1556 | break; |
1557 | 1557 | ||
@@ -1563,7 +1563,7 @@ static HRESULT SetVariableValue( | |||
1563 | case BURN_VARIANT_TYPE_STRING: | 1563 | case BURN_VARIANT_TYPE_STRING: |
1564 | if (!pVariant->sczValue) | 1564 | if (!pVariant->sczValue) |
1565 | { | 1565 | { |
1566 | LogStringLine(REPORT_STANDARD, "Unsetting variable '%ls'", wzVariable, pVariant->sczValue); | 1566 | LogStringLine(REPORT_STANDARD, "Unsetting variable '%ls'", wzVariable); |
1567 | } | 1567 | } |
1568 | else | 1568 | else |
1569 | { | 1569 | { |
@@ -1572,7 +1572,14 @@ static HRESULT SetVariableValue( | |||
1572 | break; | 1572 | break; |
1573 | 1573 | ||
1574 | case BURN_VARIANT_TYPE_VERSION: | 1574 | case BURN_VARIANT_TYPE_VERSION: |
1575 | LogStringLine(REPORT_STANDARD, "Setting version variable '%ls' to value '%ls'", wzVariable, pVariant->pValue->sczVersion); | 1575 | if (!pVariant->pValue) |
1576 | { | ||
1577 | LogStringLine(REPORT_STANDARD, "Unsetting variable '%ls'", wzVariable); | ||
1578 | } | ||
1579 | else | ||
1580 | { | ||
1581 | LogStringLine(REPORT_STANDARD, "Setting version variable '%ls' to value '%ls'", wzVariable, pVariant->pValue->sczVersion); | ||
1582 | } | ||
1576 | break; | 1583 | break; |
1577 | 1584 | ||
1578 | default: | 1585 | default: |
@@ -1581,7 +1588,7 @@ static HRESULT SetVariableValue( | |||
1581 | } | 1588 | } |
1582 | } | 1589 | } |
1583 | 1590 | ||
1584 | if (BURN_VARIANT_TYPE_VERSION == pVariant->Type && pVariant->pValue->fInvalid) | 1591 | if (BURN_VARIANT_TYPE_VERSION == pVariant->Type && pVariant->pValue && pVariant->pValue->fInvalid) |
1585 | { | 1592 | { |
1586 | LogId(REPORT_WARNING, MSG_VARIABLE_INVALID_VERSION, wzVariable); | 1593 | LogId(REPORT_WARNING, MSG_VARIABLE_INVALID_VERSION, wzVariable); |
1587 | } | 1594 | } |
diff --git a/src/engine/variant.cpp b/src/engine/variant.cpp index 9fdb82cd..82f465b2 100644 --- a/src/engine/variant.cpp +++ b/src/engine/variant.cpp | |||
@@ -198,7 +198,14 @@ static HRESULT GetVersionInternal( | |||
198 | case BURN_VARIANT_TYPE_VERSION: | 198 | case BURN_VARIANT_TYPE_VERSION: |
199 | BVariantRetrieveVersion(pVariant, &pValue); | 199 | BVariantRetrieveVersion(pVariant, &pValue); |
200 | 200 | ||
201 | hr = VerCopyVersion(pValue, ppValue); | 201 | if (!pValue) |
202 | { | ||
203 | *ppValue = NULL; | ||
204 | } | ||
205 | else | ||
206 | { | ||
207 | hr = VerCopyVersion(pValue, ppValue); | ||
208 | } | ||
202 | break; | 209 | break; |
203 | default: | 210 | default: |
204 | hr = E_INVALIDARG; | 211 | hr = E_INVALIDARG; |
@@ -275,14 +282,22 @@ extern "C" HRESULT BVariantSetVersion( | |||
275 | HRESULT hr = S_OK; | 282 | HRESULT hr = S_OK; |
276 | BOOL fEncryptValue = pVariant->fEncryptString; | 283 | BOOL fEncryptValue = pVariant->fEncryptString; |
277 | 284 | ||
278 | if (BURN_VARIANT_TYPE_FORMATTED == pVariant->Type || | 285 | if (!pValue) // if we're nulling out the version, make the variable NONE. |
279 | BURN_VARIANT_TYPE_STRING == pVariant->Type) | ||
280 | { | 286 | { |
281 | StrSecureZeroFreeString(pVariant->sczValue); | 287 | BVariantUninitialize(pVariant); |
282 | } | 288 | } |
283 | memset(pVariant, 0, sizeof(BURN_VARIANT)); | 289 | else // assign the value. |
284 | hr = VerCopyVersion(pValue, &pVariant->pValue); | 290 | { |
285 | pVariant->Type = BURN_VARIANT_TYPE_VERSION; | 291 | if (BURN_VARIANT_TYPE_FORMATTED == pVariant->Type || |
292 | BURN_VARIANT_TYPE_STRING == pVariant->Type) | ||
293 | { | ||
294 | StrSecureZeroFreeString(pVariant->sczValue); | ||
295 | } | ||
296 | memset(pVariant, 0, sizeof(BURN_VARIANT)); | ||
297 | hr = VerCopyVersion(pValue, &pVariant->pValue); | ||
298 | pVariant->Type = BURN_VARIANT_TYPE_VERSION; | ||
299 | } | ||
300 | |||
286 | BVariantSetEncryption(pVariant, fEncryptValue); | 301 | BVariantSetEncryption(pVariant, fEncryptValue); |
287 | 302 | ||
288 | return hr; | 303 | return hr; |