diff --git a/newlib/libc/locale/setlocale.h b/newlib/libc/locale/setlocale.h index 99bd4668b..5bf9edcf1 100644 --- a/newlib/libc/locale/setlocale.h +++ b/newlib/libc/locale/setlocale.h @@ -195,8 +195,6 @@ struct __locale_t }; extern const struct __locale_t __C_locale; -extern struct __locale_t __global_locale; - extern char *__loadlocale (struct __locale_t *, int, const char *); extern const char *__get_locale_env(struct _reent *, int); @@ -210,6 +208,7 @@ extern size_t _wcsnrtombs_l (struct _reent *, char *, const wchar_t **, _ELIDABLE_INLINE struct __locale_t * __get_global_locale () { + extern struct __locale_t __global_locale; return &__global_locale; } @@ -227,7 +226,8 @@ __get_locale_r (struct _reent *r) _ELIDABLE_INLINE struct __locale_t * __get_current_locale () { - return _REENT->_locale ?: &__global_locale; + return _REENT->_locale ?: __get_global_locale (); +} } #ifdef __CYGWIN__ diff --git a/winsup/cygwin/nlsfuncs.cc b/winsup/cygwin/nlsfuncs.cc index 3e3b5f42a..60ad2d375 100644 --- a/winsup/cygwin/nlsfuncs.cc +++ b/winsup/cygwin/nlsfuncs.cc @@ -1524,11 +1524,11 @@ internal_setlocale () wchar_t *w_path = NULL, *w_cwd; /* Don't do anything if the charset hasn't actually changed. */ - if (cygheap->locale.mbtowc == __global_locale.mbtowc) + if (cygheap->locale.mbtowc == __get_global_locale ()->mbtowc) return; debug_printf ("Global charset set to %s", - __locale_charset (&__global_locale)); + __locale_charset (__get_global_locale ())); /* Fetch PATH and CWD and convert to wchar_t in previous charset. */ path = getenv ("PATH"); if (path && *path) /* $PATH can be potentially unset. */ @@ -1541,7 +1541,7 @@ internal_setlocale () sys_cp_mbstowcs (cygheap->locale.mbtowc, w_cwd, 32768, cygheap->cwd.get_posix ()); /* Set charset for internal conversion functions. */ - cygheap->locale.mbtowc = __global_locale.mbtowc; + cygheap->locale.mbtowc = __get_global_locale ()->mbtowc; if (cygheap->locale.mbtowc == __ascii_mbtowc) cygheap->locale.mbtowc = __utf8_mbtowc; /* Restore CWD and PATH in new charset. */