From 7df039b1c51d835ead337292d865b3f96afbbe72 Mon Sep 17 00:00:00 2001 From: Union Palenshus Date: Mon, 23 Nov 2020 21:48:19 -0800 Subject: [PATCH 1/2] Adding export to WinGetUtil.dll to expose Version comparing --- src/WinGetUtil/Exports.cpp | 17 +++++++++++++++++ src/WinGetUtil/Source.def | 1 + src/WinGetUtil/WinGetUtil.h | 6 ++++++ src/WinGetUtil/WinGetUtil.vcxproj | 2 +- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/WinGetUtil/Exports.cpp b/src/WinGetUtil/Exports.cpp index 8ffd7a8c1e..90c9a1e358 100644 --- a/src/WinGetUtil/Exports.cpp +++ b/src/WinGetUtil/Exports.cpp @@ -227,4 +227,21 @@ extern "C" return S_OK; } CATCH_RETURN() + + WINGET_UTIL_API WinGetCompareVersions( + WINGET_STRING versionA, + WINGET_STRING versionB, + INT* comparisonResult) try + { + THROW_HR_IF(E_INVALIDARG, !versionA); + THROW_HR_IF(E_INVALIDARG, !versionB); + + Version vA{ ConvertToUTF8(versionA) }; + Version vB{ ConvertToUTF8(versionB) }; + + *comparisonResult = vA < vB ? -1 : vA == vB ? 0 : 1; + + return S_OK; + } + CATCH_RETURN() } diff --git a/src/WinGetUtil/Source.def b/src/WinGetUtil/Source.def index 9cfc6d000c..727acfd0c0 100644 --- a/src/WinGetUtil/Source.def +++ b/src/WinGetUtil/Source.def @@ -12,3 +12,4 @@ EXPORTS WinGetSQLiteIndexCheckConsistency WinGetValidateManifest WinGetDownload + WinGetCompareVersions diff --git a/src/WinGetUtil/WinGetUtil.h b/src/WinGetUtil/WinGetUtil.h index c8d7799de6..e4892969e0 100644 --- a/src/WinGetUtil/WinGetUtil.h +++ b/src/WinGetUtil/WinGetUtil.h @@ -86,4 +86,10 @@ extern "C" WINGET_STRING filePath, BYTE* sha256Hash, UINT32 sha256HashLength); + + // Compares two version strings, returning -1 if versionA is less than versionB, 0 if they're equal, or 1 if versionA is greater than versionB + WINGET_UTIL_API WinGetCompareVersions( + WINGET_STRING versionA, + WINGET_STRING versionB, + INT* comparisonResult); } diff --git a/src/WinGetUtil/WinGetUtil.vcxproj b/src/WinGetUtil/WinGetUtil.vcxproj index ec5ff0d1af..d674ca0573 100644 --- a/src/WinGetUtil/WinGetUtil.vcxproj +++ b/src/WinGetUtil/WinGetUtil.vcxproj @@ -144,7 +144,7 @@ Source.def wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;Advapi32.lib;%(AdditionalDependencies) wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;Advapi32.lib;%(AdditionalDependencies) - wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;Advapi32.lib;%(AdditionalDependencies) + version.lib;wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;Advapi32.lib;%(AdditionalDependencies) winsqlite3.dll;icuuc.dll;icuin.dll;%(DelayLoadDLLs) winsqlite3.dll;icuuc.dll;icuin.dll;%(DelayLoadDLLs) winsqlite3.dll;icuuc.dll;icuin.dll;%(DelayLoadDLLs) From db8a201f364df9b520494ab3619fa347aae57bbe Mon Sep 17 00:00:00 2001 From: Union Palenshus Date: Tue, 24 Nov 2020 17:09:02 -0800 Subject: [PATCH 2/2] PR feedback --- src/WinGetUtil/Exports.cpp | 2 +- src/WinGetUtil/WinGetUtil.vcxproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WinGetUtil/Exports.cpp b/src/WinGetUtil/Exports.cpp index 90c9a1e358..0e416a760c 100644 --- a/src/WinGetUtil/Exports.cpp +++ b/src/WinGetUtil/Exports.cpp @@ -239,7 +239,7 @@ extern "C" Version vA{ ConvertToUTF8(versionA) }; Version vB{ ConvertToUTF8(versionB) }; - *comparisonResult = vA < vB ? -1 : vA == vB ? 0 : 1; + *comparisonResult = vA < vB ? -1 : (vA == vB ? 0 : 1); return S_OK; } diff --git a/src/WinGetUtil/WinGetUtil.vcxproj b/src/WinGetUtil/WinGetUtil.vcxproj index d674ca0573..ec5ff0d1af 100644 --- a/src/WinGetUtil/WinGetUtil.vcxproj +++ b/src/WinGetUtil/WinGetUtil.vcxproj @@ -144,7 +144,7 @@ Source.def wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;Advapi32.lib;%(AdditionalDependencies) wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;Advapi32.lib;%(AdditionalDependencies) - version.lib;wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;Advapi32.lib;%(AdditionalDependencies) + wininet.lib;shell32.lib;winsqlite3.lib;shlwapi.lib;icuuc.lib;icuin.lib;urlmon.lib;Advapi32.lib;%(AdditionalDependencies) winsqlite3.dll;icuuc.dll;icuin.dll;%(DelayLoadDLLs) winsqlite3.dll;icuuc.dll;icuin.dll;%(DelayLoadDLLs) winsqlite3.dll;icuuc.dll;icuin.dll;%(DelayLoadDLLs)