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


Reply via email to