MS implementation does not follow C11 Annex K. MS _s functions have lot
of times different number of arguments than the C11 Annex K. And if I
remember correctly, to use C11 Annex K functions, you need to define
some macro prior including C header files. So in case you want to
implement C11 Annex K, you could do it and in header files add
#ifdef MACRO and use asm("symbol") redirection to C11 Annex K wrapper
functions. By default we should stick with the MS implementation.On Tuesday 13 January 2026 21:27:34 Luca Bacci wrote: > Yeah, it seems that MS implemented getenv_s before it was made part of the > standard in C11. So I'd lean towards preserving MS-specific semantics. > > https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm#impementations > > Best Regards, > Luca > > Inviato da Outlook per Android<https://aka.ms/AAb9ysg> > ________________________________ > From: Kirill Makurin <[email protected]> > Sent: Tuesday, January 13, 2026 10:12:43 PM > To: Mingw W64 Public <[email protected]> > Cc: Pali Rohár <[email protected]> > Subject: Re: [Mingw-w64-public] [RFC] getenv_s is not standard compliant > > Microsoft documentation[1] does not mention an error condition for getenv_s > when environment variable is not found. > > Also note that we have implementation of getenv_s in: > > 1. mingw-w64-crt/secapi/getenv_s.c, around CRT's getenv > 2. mingw-w64-libraries/winstorecompat/src/getenv_s.c, around > GetEnvironmentVariableA > > both seem to follow Microsoft's behavior when variable is not found. > > I don't know if anyone really uses these *secure* functions; I would prefer > to keep compatibility with Microsoft's implementation. > > Pali, do you have an opinion on this? > > [1] > https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/getenv-s-wgetenv-s > ________________________________ > From: Luca Bacci <[email protected]> > Sent: Tuesday, January 13, 2026 7:16 PM > To: Mingw W64 Public <[email protected]> > Subject: [Mingw-w64-public] [RFC] getenv_s is not standard compliant > > The C standard says (C23 K.3.6.2.1): > The getenv_s function returns zero if the specified name is found and the > associated string was successfully stored in value . Otherwise, a nonzero > value is returned > However getenv_s in the UCRT reports success (return value is 0) for > non-exisiting environment variables: > > #include <windows.h> > #include <stdlib.h> > #include <assert.h> > > int > main (void) > { > char value[100]; > size_t len; > errno_t ret; > > ret = getenv_s (&len, value, sizeof (value), "NONEXISTING"); > assert (ret != 0); > } > > Should we provide a wrapper? > > Best Regards, > Luca > > _______________________________________________ > Mingw-w64-public mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/mingw-w64-public > > _______________________________________________ > Mingw-w64-public mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/mingw-w64-public _______________________________________________ Mingw-w64-public mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
