Mismatch between newlib and glibc regarding fileno

Torbjorn SVENSSON torbjorn.svensson@foss.st.com
Fri Feb 9 16:29:56 GMT 2024


Hi all,

I've been trying to run tests for arm-none-eabi on GCC14 tree.
What I've seen is that fileno() is not available. If you look though the 
header files, I see that this is guarded by __POSIX_VISIBLE and due to a 
recent change in the GCC testsuite (part of PR96395), they moved the 
test case to gcc/testsuite/c-c++-common/analyzer/fileno-1.c and then 
invoke it with g++ and -std=c++98. With this change, strict ANSI is 
defined, but not __POSIX_VISIBLE.

If I run the same test on the native g++ tool in Ubuntu, I instead get 
that __USE_POSIX is set (the guard for fileno() in glibc), so this 
differs from the behavior noticed with newlib.


Is it correct that newlib does not define __POSIX_VISIBLE when g++ is 
invoked with -std=c++98 (or any other standard that does not use the GNU 
extensions)?
It can also be seen using gcc with -std=c11 for example, so it's not 
strictly a C vs C++ issue.


The expression used in glibc: 
https://github.com/bminor/glibc/blob/master/include/features.h#L335

The expression used in newlib: 
https://sourceware.org/git/?p=newlib-cygwin.git;a=blob;f=newlib/libc/include/sys/features.h;h=6a925c87e9ec333fc51538201aa7b52d24b3ca5b;hb=refs/heads/main#l148


Kind regards,
Torbjörn


More information about the Newlib mailing list