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 /src/engine | |
| parent | 60717700e175d38412559113c8a5388c954c7c91 (diff) | |
| download | wix-a0c40d5a1b8537a6338dacc27a88d236077ab785.tar.gz wix-a0c40d5a1b8537a6338dacc27a88d236077ab785.tar.bz2 wix-a0c40d5a1b8537a6338dacc27a88d236077ab785.zip | |
Allow unsetting version variables.
Diffstat (limited to 'src/engine')
| -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; |
