Hello, do you have any opinion how to move forward with this issue?

Do we really needed special value for __MSVCRT_VERSION__ (e.g. 0x6FF pr
0x7FF)? Or can we just reuse 0x600 value together with _WIN32_WINNT check?

On Saturday 19 October 2024 13:04:44 Pali Rohár wrote:
> On Saturday 19 October 2024 00:10:09 Martin Storsjö wrote:
> > On Fri, 18 Oct 2024, Pali Rohár wrote:
> > 
> > > > Liu Hao presented another option in the discussion as well - we could 
> > > > also
> > > > define __MSVCRT_VERSION__ to another value inbetween, as it currently is
> > > > 0x700 for msvcr70.dll, we could set it to 0x7FF, so that existing
> > > > comparisons with <= and >= behave mostly the same as before, while we 
> > > > can
> > > > explicitly check for whether we mean msvcrt.dll or msvcr70.dll in the 
> > > > places
> > > > where we want to.
> > > 
> > > 0x7FF has drawback, that <= and >= does not work for symbols available
> > > in Vista+ msvcrt.dll but which are not available in msvcr70.dll and
> > > msvcr71.dll.
> > 
> > Yes, if we'd use 0x7FF we would still need to explicitly check for 0x7FF,
> > e.g. (== 0x7FF && vista) || (>= 0x800).
> > 
> > > > But you're right that technically, msvcrt.dll is more of a 6.0 than a 
> > > > 7.0
> > > > msvcrt (although it has gotten many additions on top of the original one
> > > > from MSVC 6.0). I guess we could use 0x6FF as well, to allow us to
> > > > distinguish that we mean msvcrt.dll as shipped with an OS, including
> > > > possibly all the new stuff that come with it in newer versions, rather 
> > > > than
> > > > the strict msvcrt.dll from MSVC 6.0.
> > > 
> > > It is needed to have special value (like 0x6FF) for __MSVCRT_VERSION__
> > > when doing system version check? Because at the same time it is always
> > > needed to check also for _WIN32_WINNT.
> > > 
> > > As you pointed out, adding more values or macros just make it more
> > > complex. And another possible value for __MSVCRT_VERSION__ just increase
> > > complexity too.
> > > 
> > > So in my opinion reusing 0x600 with _WIN32_WINNT could be enough:
> > > 
> > >    #if (__MSVCRT_VERSION__ == 0x600 && _WIN32_WINNT >= 0x0600)
> > > 
> > > 
> > > I think that special value like 0x6FF just increase complexity and still
> > > it would be needed to write code as:
> > > 
> > >    #if (__MSVCRT_VERSION__ == 0x6FF && _WIN32_WINNT >= 0x0600)
> > 
> > Yes, it doesn't change anything wrt complexity, we'd still need the same
> > amount of conditions and everything.
> > 
> > It's only about whether we want to be able to distinguish between strictly
> > the MSVC 6.0 msvcrt.dll and the newer OS-provided ones.
> 
> I think we do not need to distinguish between MSVC 6.0 msvcrt.dll and
> os-system version of msvcrt.dll. os-system version is backward
> compatible with MSVC 6.0 (and also with 5.0 and 4.2), it has same name
> and ABI. Also mingw-w64 does not provide import library for MSVC 6.0
> msvcrt.dll (neither for older versions 5.0 and 4.2), so there is no use
> case for distinguishing between 6.0 and os-version.
> 
> And I do not see reason for introducing strict 6.0/5.0/4.2 import
> library, as the import library for os-system version of msvcrt.dll
> covers also msvc 6.0, 5.0 and 4.2 versions, thanks to backward
> compatibility.
> 
> > You may be right that we don't need to distinguish that, as the _WIN32_WINNT
> > checks already give that aspect.
> 
> And if there is a need to distinguish between the msvc 6.0 and os-system
> version for Windows XP (or Vista+ or any other) then _WIN32_WINNT is
> enough. Because msvc 6.0 is Windows 98 SE os-system library. So
> _WIN32_WINNT can fully cover this hypothetical situation.
> 
> I'm looking at this problem from the perspective to make it as simple as
> possible - so do not introduce a new value for __MSVCRT_VERSION__, just
> because any new value makes it more complex.
> 
> > In any case, we'd need to revisit all the existing version checks, it only
> > changes what version numbers we'd put into those checks.
> > 
> > // Martin


_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to