diff options
author | Rob Mensching <rob@firegiant.com> | 2022-05-09 22:21:16 -0700 |
---|---|---|
committer | Rob Mensching <rob@firegiant.com> | 2022-05-10 13:03:03 -0700 |
commit | 02e682881979cd87592ee1e8e39b7744b575829c (patch) | |
tree | ef0db025ca499781cf5add96a49ffd3934c0b34e /src/libs/dutil/WixToolset.DUtil/regutil.cpp | |
parent | 905a6b0c4a214a373cb437ca28ea5610b3ad7654 (diff) | |
download | wix-02e682881979cd87592ee1e8e39b7744b575829c.tar.gz wix-02e682881979cd87592ee1e8e39b7744b575829c.tar.bz2 wix-02e682881979cd87592ee1e8e39b7744b575829c.zip |
Add support for semver in bundles and dependencies
Take advantage of WixVersion/verutil functionality to support wider
range of version numbers were possible in the WiX Toolset
Completes 4666
Diffstat (limited to 'src/libs/dutil/WixToolset.DUtil/regutil.cpp')
-rw-r--r-- | src/libs/dutil/WixToolset.DUtil/regutil.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/libs/dutil/WixToolset.DUtil/regutil.cpp b/src/libs/dutil/WixToolset.DUtil/regutil.cpp index 78507ade..64224d42 100644 --- a/src/libs/dutil/WixToolset.DUtil/regutil.cpp +++ b/src/libs/dutil/WixToolset.DUtil/regutil.cpp | |||
@@ -590,6 +590,7 @@ DAPI_(HRESULT) RegReadVersion( | |||
590 | { | 590 | { |
591 | ExitFunction1(hr = E_FILENOTFOUND); | 591 | ExitFunction1(hr = E_FILENOTFOUND); |
592 | } | 592 | } |
593 | |||
593 | if (REG_SZ == dwType || REG_EXPAND_SZ == dwType) | 594 | if (REG_SZ == dwType || REG_EXPAND_SZ == dwType) |
594 | { | 595 | { |
595 | hr = RegReadString(hk, wzName, &sczVersion); | 596 | hr = RegReadString(hk, wzName, &sczVersion); |
@@ -614,6 +615,58 @@ LExit: | |||
614 | return hr; | 615 | return hr; |
615 | } | 616 | } |
616 | 617 | ||
618 | |||
619 | DAPI_(HRESULT) RegReadWixVersion( | ||
620 | __in HKEY hk, | ||
621 | __in_z_opt LPCWSTR wzName, | ||
622 | __out VERUTIL_VERSION** ppVersion | ||
623 | ) | ||
624 | { | ||
625 | HRESULT hr = S_OK; | ||
626 | DWORD er = ERROR_SUCCESS; | ||
627 | DWORD dwType = 0; | ||
628 | DWORD cb = 0; | ||
629 | DWORD64 dw64Version = 0; | ||
630 | LPWSTR sczVersion = NULL; | ||
631 | VERUTIL_VERSION* pVersion = NULL; | ||
632 | |||
633 | cb = sizeof(DWORD64); | ||
634 | er = vpfnRegQueryValueExW(hk, wzName, NULL, &dwType, reinterpret_cast<LPBYTE>(&dw64Version), &cb); | ||
635 | if (E_FILENOTFOUND == HRESULT_FROM_WIN32(er)) | ||
636 | { | ||
637 | ExitFunction1(hr = E_FILENOTFOUND); | ||
638 | } | ||
639 | |||
640 | if (REG_SZ == dwType || REG_EXPAND_SZ == dwType) | ||
641 | { | ||
642 | hr = RegReadString(hk, wzName, &sczVersion); | ||
643 | RegExitOnFailure(hr, "Failed to read registry version as string."); | ||
644 | |||
645 | hr = VerParseVersion(sczVersion, 0, FALSE, &pVersion); | ||
646 | RegExitOnFailure(hr, "Failed to convert registry string to version."); | ||
647 | } | ||
648 | else if (REG_QWORD == dwType) | ||
649 | { | ||
650 | hr = VerVersionFromQword(dw64Version, &pVersion); | ||
651 | RegExitOnFailure(hr, "Failed to convert registry string to version."); | ||
652 | } | ||
653 | else // unexpected data type | ||
654 | { | ||
655 | hr = HRESULT_FROM_WIN32(ERROR_INVALID_DATATYPE); | ||
656 | RegExitOnRootFailure(hr, "Error reading version registry value due to unexpected data type: %u", dwType); | ||
657 | } | ||
658 | |||
659 | *ppVersion = pVersion; | ||
660 | pVersion = NULL; | ||
661 | |||
662 | LExit: | ||
663 | ReleaseVerutilVersion(pVersion); | ||
664 | ReleaseStr(sczVersion); | ||
665 | |||
666 | return hr; | ||
667 | } | ||
668 | |||
669 | |||
617 | DAPI_(HRESULT) RegReadNone( | 670 | DAPI_(HRESULT) RegReadNone( |
618 | __in HKEY hk, | 671 | __in HKEY hk, |
619 | __in_z_opt LPCWSTR wzName | 672 | __in_z_opt LPCWSTR wzName |