Now I'm thinking about this change. Is not there sign-extend issue too? Is IsDBCSLeadByte taking as its argument signed char or unsigned char?
According to ms doc: https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/ismbblead-ismbblead-l https://learn.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-isdbcsleadbyte _ismbblead is taking unsigned int IsDBCSLeadByte is taking BYTE I have feeling that explicit cast to (unsigned char) should have been used in both cases. But could it work without it? On Wednesday 24 September 2025 18:10:30 Pali Rohár wrote: > crtexewin.c in non-UNICODE mode parses Windows command line string. This > string is stored in the ACP. There is no CRT function which guarantees that > is working in ACP and is checking if the character is a lead byte. > > CRT function isleadbyte() uses codepage from CRT's current locale which may > differs from ACP. > > CRT function _ismbblead() uses codepage set by the CRT function _setmbcp() > which also may differs from ACP (but by default should be ACP). > > So when parsing Windows command line arguments, use the WinAPI function > IsDBCSLeadByte() which always works according to ACP and hence should be > the right one for this purpose. > --- > mingw-w64-crt/crt/crtexewin.c | 6 +----- > 1 file changed, 1 insertion(+), 5 deletions(-) > > diff --git a/mingw-w64-crt/crt/crtexewin.c b/mingw-w64-crt/crt/crtexewin.c > index af860f3e76da..52d12bd12029 100644 > --- a/mingw-w64-crt/crt/crtexewin.c > +++ b/mingw-w64-crt/crt/crtexewin.c > @@ -7,10 +7,6 @@ > #include <tchar.h> > #include <corecrt_startup.h> > > -#ifndef _UNICODE > -#include <mbctype.h> > -#endif > - > #define SPACECHAR _T(' ') > #define DQUOTECHAR _T('\"') > > @@ -40,7 +36,7 @@ int _tmain (int __UNUSED_PARAM(argc), > if (*lpCmdLine == DQUOTECHAR) > inDoubleQuote = !inDoubleQuote; > #ifndef _UNICODE > - if (_ismbblead (*lpCmdLine)) > + if (IsDBCSLeadByte (*lpCmdLine)) > { > if (lpCmdLine[1]) > ++lpCmdLine; > -- > 2.20.1 > _______________________________________________ Mingw-w64-public mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
