On 2025-10-21 21:01, Martin Storsjö wrote:
On Tue, 21 Oct 2025, Peter Damianov via Mingw-w64-public wrote:

Implement 0b/0B binary prefix support in strtol, strtoul, wcstol, wcstoul
and related functions for C23 compliance.

* Add %b prefix parsing to strtoimax/wcstoimax/strtoumax/wcstoumax
* Add implementations of strtol, strtoul, wcstol, wcstoul with %b prefix
 parsing in misc/
* Expose new implementations of strtox family in stdlib.h and wchar.h when
 __USE_MINGW_STRTOX is defined

Signed-off-by: Peter Damianov <[email protected]>

A couple points:

So while UCRT does implement C99, it probably doesn't implement C23 yet - or does it? Within mingw-w64-crt, we have as a general direction tried to reduce the amount of custom CRT functions that we link in, and use more of the bare UCRT as is.

I think this is a sensible direction. But these implementations are only used when __USE_MINGW_ANSI_STDIO is defined, or __USE_MINGW_STRTOX.


But as newer standards require more functionality, and UCRT doesn't provide it (yet?), I guess it's inevitable that we might have to re-override more functions again.

After this patch, we end up with both the CRT libraries, and libmingwex, providing the functions (e.g. "strtol"). That's not ideal, because depending on linking order, you may end up with either the CRT's definition, or libmingwex's. So if we want libmingwex to provide this function (across all CRTs), then we should also probably stop providing that function from the CRT import library, for consistency. (If there was a case where we'd want to provide it for some, but not all, CRTs, we should add it to those import libraries rather than libmingwex.)

Sorry. Not sure I follow. You can call either functions depending on the define, I'm not trying to override it unconditionally.


What's the origin of the added code? Is it old mingw-w64 code, or something else? (It doesn't look like code written fresh from scratch, given peculiarities like use of "register" for variables...) If it's something else, is the copyright header accurate?

It's old mingw-w64 code. I just copied the current implementations out of strtoimax.c and strtoumax.c and instead modified them for 32-bits.
I could also just write from scratch ones if needed.

/*
    This source code was extracted from the Q8 package created and
    placed in the PUBLIC DOMAIN by Doug Gwyn <[email protected]>
    last edit:  1999/11/05      [email protected]

        Implements subclause 7.8.2 of ISO/IEC 9899:1999 (E).

        This particular implementation requires the matching <inttypes.h>.
        It also assumes that character codes for A..Z and a..z are in
        contiguous ascending order; this is true for ASCII but not EBCDIC.
*/

I suppose I ought to have put this header on the new files too, but it's public domain, so whatever.


Finally - it'd be nice if we'd have some tests for this.

Totally, I will provide them in the next version.


// Martin


_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to