From 033c0d7edcb04845b31ca09ae87f9c25acab975d Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Tue, 26 Feb 2002 09:35:50 +0000 Subject: Proper support for setting h_errno --- libc/misc/internals/Makefile | 2 +- libc/misc/internals/__h_errno_location.c | 10 ++++++++++ libc/misc/internals/__uClibc_main.c | 7 ++++++- 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 libc/misc/internals/__h_errno_location.c (limited to 'libc/misc/internals') diff --git a/libc/misc/internals/Makefile b/libc/misc/internals/Makefile index c81e02078..6e1c2c29d 100644 --- a/libc/misc/internals/Makefile +++ b/libc/misc/internals/Makefile @@ -24,7 +24,7 @@ TOPDIR=../../../ include $(TOPDIR)Rules.mak -CSRC=ultostr.c ltostr.c __uClibc_main.c tempname.c errno.c __errno_location.c +CSRC=ultostr.c ltostr.c __uClibc_main.c tempname.c errno.c __errno_location.c __h_errno_location.c ifeq ($(HAS_FLOATING_POINT),true) CSRC += dtostr.c zoicheck.c endif diff --git a/libc/misc/internals/__h_errno_location.c b/libc/misc/internals/__h_errno_location.c new file mode 100644 index 000000000..f4f598057 --- /dev/null +++ b/libc/misc/internals/__h_errno_location.c @@ -0,0 +1,10 @@ +#define __FORCE_GLIBC +#include +#include +#undef h_errno + +int * weak_const_function __h_errno_location (void) +{ + return &h_errno; +} + diff --git a/libc/misc/internals/__uClibc_main.c b/libc/misc/internals/__uClibc_main.c index ffe8ad813..7f5e6e805 100644 --- a/libc/misc/internals/__uClibc_main.c +++ b/libc/misc/internals/__uClibc_main.c @@ -30,11 +30,13 @@ void __uClibc_main(int argc, char **argv, char **envp) weak_alias(__environ, environ); extern void weak_function __init_stdio(void); extern void weak_function __stdio_flush_buffers(void); -extern int *weak_function __errno_location (void); +extern int *weak_const_function __errno_location (void); +extern int *weak_const_function __h_errno_location (void); #else extern void __init_stdio(void); extern void __stdio_flush_buffers(void); extern int *__errno_location (void); +extern int *__h_errno_location (void); #endif /* @@ -79,6 +81,9 @@ void __uClibc_main(int argc, char **argv, char **envp) */ if (__errno_location) *(__errno_location()) = 0; + /* Set h_errno to 0 as well */ + if (__h_errno_location) + *(__h_errno_location()) = 0; /* * Finally, invoke application's main and then exit. -- cgit v1.2.3