[PATCH] Fixes compile failure if REENTRANT_SYSCALLS_PROVIDED and MISSING_SYSCALL_NAMES defined
Corinna Vinschen
vinschen@redhat.com
Fri Jan 17 13:09:10 GMT 2025
On Jan 16 15:00, Markus Eisenmann wrote:
> Hi!
>
> The attached patch will fix some compiler issues if the macros REENTRANT_SYSCALLS_PROVIDED and MISSING_SYSCALL_NAMES ...
>
> In case of stdio/fopen.c and stdio64/fopen64.c compiling with a newer compiler like GCC 14.2 will
> abort with an error like "implicit declaration of ...", because the open() - as replacement of _open_r (see reent.h) -
> isn't declared; I.e., including <fcntl.h> unconditionaly fixes this compile-issue.
> Note: Older GCC's are more "relaxed" and - for example GCC 11.3 - does not warn about this implicit declaration ?!
>
> Another similar issue was replacing _rename_r by rename() in stdio/rename.c whitch caused a "forever-
> loop" or stack-overflow by recursion - depending on the optimization level.
>
> Best regards from Austria,
> Markus
> From 020ef623fa0e49cf3c346ff0df53376c29a65f33 Mon Sep 17 00:00:00 2001
> From: Markus Eisenmann <markus.eisenmann@outlook.com>
> Date: Thu, 16 Jan 2025 15:13:54 +0100
> Subject: [PATCH] Fixes compile failure if REENTRANT_SYSCALLS_PROVIDED and
> MISSING_SYSCALL_NAMES defined
>
> If the macros REENTRANT_SYSCALLS_PROVIDED and MISSING_SYSCALL_NAMES are defined some
> _reent_*-functions are replaced by the system-call and this leads to compile-warning
> or a runtime-failure.
>
> * newlib/libc/stdio/fopen.c _open_r is replaces by open(), declared in <fcntl.h>
> * newlib/libc/stdio64/fopen64.c ditto
> * newlib/libc/stdio/rename.c _rename_r is rename() itself; i.e, fix recursion
> ---
> newlib/libc/stdio/fopen.c | 2 --
> newlib/libc/stdio/rename.c | 3 ++-
> newlib/libc/stdio64/fopen64.c | 2 --
> 3 files changed, 2 insertions(+), 5 deletions(-)
Pushed.
Thanks,
Corinna
More information about the Newlib
mailing list