From 0ea53e27361cbfe664df98d717e55005f329aff1 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Mon, 16 May 2022 16:03:25 -0500 Subject: Store the prefix character in VERUTIL_VERSION. Fix edge case where version string is all v's. --- src/api/burn/WixToolset.Mba.Core/VerUtil.cs | 1 + src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs | 6 ++ .../test/WixToolsetTest.Mba.Core/VerUtilFixture.cs | 2 + src/burn/test/BurnUnitTest/RegistrationTest.cpp | 3 + src/libs/dutil/WixToolset.DUtil/inc/verutil.h | 1 + src/libs/dutil/WixToolset.DUtil/verutil.cpp | 37 ++++++---- src/libs/dutil/test/DUtilUnitTest/VerUtilTests.cpp | 82 +++++++++++++++++++++- 7 files changed, 118 insertions(+), 14 deletions(-) diff --git a/src/api/burn/WixToolset.Mba.Core/VerUtil.cs b/src/api/burn/WixToolset.Mba.Core/VerUtil.cs index a342f85c..611f9710 100644 --- a/src/api/burn/WixToolset.Mba.Core/VerUtil.cs +++ b/src/api/burn/WixToolset.Mba.Core/VerUtil.cs @@ -59,6 +59,7 @@ namespace WixToolset.Mba.Core internal struct VersionStruct { public IntPtr sczVersion; + public char chPrefix; public uint dwMajor; public uint dwMinor; public uint dwPatch; diff --git a/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs b/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs index 7408c26f..731dedaf 100644 --- a/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs +++ b/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs @@ -17,6 +17,7 @@ namespace WixToolset.Mba.Core var pVersion = handle.DangerousGetHandle(); var version = (VerUtil.VersionStruct)Marshal.PtrToStructure(pVersion, typeof(VerUtil.VersionStruct)); this.Version = Marshal.PtrToStringUni(version.sczVersion); + this.Prefix = version.chPrefix; this.Major = version.dwMajor; this.Minor = version.dwMinor; this.Patch = version.dwPatch; @@ -38,6 +39,11 @@ namespace WixToolset.Mba.Core /// public string Version { get; private set; } + /// + /// Prefix character that was stripped from Version, or the null character if there was no prefix. + /// + public char Prefix { get; private set; } + /// /// For version A.B.C.D, Major is A. It is 0 if not specified. /// diff --git a/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs b/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs index 44142e3d..ceb1b12a 100644 --- a/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs +++ b/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs @@ -49,6 +49,7 @@ namespace WixToolsetTest.Mba.Core using var parsedVersion = VerUtil.VersionFromQword(qwVersion); Assert.Equal("100.200.300.400", parsedVersion.Version); + Assert.Equal('\0', parsedVersion.Prefix); Assert.Equal(100u, parsedVersion.Major); Assert.Equal(200u, parsedVersion.Minor); Assert.Equal(300u, parsedVersion.Patch); @@ -65,6 +66,7 @@ namespace WixToolsetTest.Mba.Core using var parsedVersion = VerUtil.ParseVersion(version, strict: false); Assert.Equal(version, parsedVersion.Version); + Assert.Equal('\0', parsedVersion.Prefix); Assert.Equal(1u, parsedVersion.Major); Assert.Equal(2u, parsedVersion.Minor); Assert.Equal(3u, parsedVersion.Patch); diff --git a/src/burn/test/BurnUnitTest/RegistrationTest.cpp b/src/burn/test/BurnUnitTest/RegistrationTest.cpp index 9aadc2cc..883b9cc8 100644 --- a/src/burn/test/BurnUnitTest/RegistrationTest.cpp +++ b/src/burn/test/BurnUnitTest/RegistrationTest.cpp @@ -559,6 +559,7 @@ namespace Bootstrapper L"