4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-01-29 10:30:50 +08:00
Corinna Vinschen 4de8596b8e Fix __getreent function for Cygwin
So far the lib function __getreent always returned _impure_ptr.  On Cygwin
this is only correct after _impure_ptr got initialized.  The inline
function in include/cygwin/config.h always returns the right _reent ptr,
though.

After introducing per-thread locales, the __getreent function is called
prior to initialization of _impure_ptr (from dll_crt0_0) to access the
locale pointer, which leads to a crash.

Fix the __getreent lib function for Cygwin to return the correct _reent
pointer all the time.  Rename inline function to __inline_getreent
and introduce a macro __getreent calling the inline function.  Change
the lib function __getreent to call __inline_getreent on Cygwin.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2016-08-18 10:27:14 +02:00

20 lines
373 B
C

/* default reentrant pointer when multithread enabled */
#include <_ansi.h>
#include <reent.h>
#ifdef __getreent
#undef __getreent
#endif
struct _reent *
_DEFUN_VOID(__getreent)
{
#ifdef __CYGWIN__
/* Utilize Cygwin's inline definition from include/cygwin/config.h
(note the extra underscore) */
return __inline_getreent ();
#else
return _impure_ptr;
#endif
}