diff options
-rw-r--r-- | libc/misc/internals/Makefile | 2 | ||||
-rw-r--r-- | libc/misc/internals/__h_errno_location.c | 10 | ||||
-rw-r--r-- | libc/misc/internals/__uClibc_main.c | 7 |
3 files changed, 17 insertions, 2 deletions
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 <features.h> +#include <netdb.h> +#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. |