On 22/01/21 09:57 +0000, CHIGOT, CLEMENT via Libstdc++ wrote:
Hi Rainer> 3) POSIX 2017 and non-POSIX functions > Many of the *_l functions being used in GNU or dragonfly models aren't > POSIX 2008, but mainly POSIX 2017 or like strtof_l not POSIX at all. > However, there are really useful in the code, thus I've made a double > implementation based on "#ifdef HAVE_". Is it ok for you ? It's not really > POSIX 2008 but more POSIX 2008 with 2017 compatibility. > For the configure, I didn't find any better way to check each syscall, as > they all depend on different includes. Tell me if you have a better idea. First a general observation: there are two groups of functions you're testing for: * Pure BSD additions, not available in either POSIX.1, ISO C, or glibc: localeconv_l mbstowcs_l strtod_l strtof_l strtold_l wcsftime_l * Part of XPG7: iswctype_l strcoll_l strftime_l strxfrm_l towlower_l towupper_l wcscoll_l wcsxfrm_l wctype_l My suggestion would be not to have configure tests _GLIBCXX_HAVE_<FUNC> for any of the second group at all: this is ieee_1003.1-2008, after all, so if some OS selects that clocale variant, it better implement all of those. If really need be, one could a configure check for those and error out if any is missing. This makes the code way more readable than trying to handle some hypothetical partial implementation.In this case, it would be better to call it ieee_1003.1-2017 but I agree it would be better to avoid all these #ifdef.
Yes, 2017 is the current standard (equivalent to 2008 plus corrigenda), but we could also use a shorter, easier to remember name, like posix.1-2017, xpg7, or susv4 (or even accept all four and make them mean the same thing, though that will probably cause confusion).
Some are still needed as for example only the last version of AIX have strftime_l.As for the BSD group, I suggest to have one representative configure test (for localeconv_l perhaps) and then use an appropriate name for the group as a whole. Again, this will most likely be an all-or-nothing thing.I'm not sure this is really all-or-nothing for these. Maybe strtof_l and cie can be grouped by. But the 3 others are really different. Linux have wcsftime_l but not the others. AIX avec none. BSD have all.
Glibc has strto{f,d,ld,l,ul,ll,ull}_l too:
See
https://sourceware.org/git/?p=glibc.git;a=blob;f=stdlib/stdlib.h;h=6360845d98e6e1c3f42821def14312dc2279d74c;hb=HEAD#l268
