Reference __global_locale only via __get_global_locale.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2016-08-23 12:38:28 +02:00
parent 113abc27a6
commit 2fb5e3dfb2
2 changed files with 6 additions and 6 deletions

View File

@ -195,8 +195,6 @@ struct __locale_t
}; };
extern const struct __locale_t __C_locale; extern const struct __locale_t __C_locale;
extern struct __locale_t __global_locale;
extern char *__loadlocale (struct __locale_t *, int, const char *); extern char *__loadlocale (struct __locale_t *, int, const char *);
extern const char *__get_locale_env(struct _reent *, int); 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 * _ELIDABLE_INLINE struct __locale_t *
__get_global_locale () __get_global_locale ()
{ {
extern struct __locale_t __global_locale;
return &__global_locale; return &__global_locale;
} }
@ -227,7 +226,8 @@ __get_locale_r (struct _reent *r)
_ELIDABLE_INLINE struct __locale_t * _ELIDABLE_INLINE struct __locale_t *
__get_current_locale () __get_current_locale ()
{ {
return _REENT->_locale ?: &__global_locale; return _REENT->_locale ?: __get_global_locale ();
}
} }
#ifdef __CYGWIN__ #ifdef __CYGWIN__

View File

@ -1524,11 +1524,11 @@ internal_setlocale ()
wchar_t *w_path = NULL, *w_cwd; wchar_t *w_path = NULL, *w_cwd;
/* Don't do anything if the charset hasn't actually changed. */ /* 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; return;
debug_printf ("Global charset set to %s", 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. */ /* Fetch PATH and CWD and convert to wchar_t in previous charset. */
path = getenv ("PATH"); path = getenv ("PATH");
if (path && *path) /* $PATH can be potentially unset. */ if (path && *path) /* $PATH can be potentially unset. */
@ -1541,7 +1541,7 @@ internal_setlocale ()
sys_cp_mbstowcs (cygheap->locale.mbtowc, w_cwd, 32768, sys_cp_mbstowcs (cygheap->locale.mbtowc, w_cwd, 32768,
cygheap->cwd.get_posix ()); cygheap->cwd.get_posix ());
/* Set charset for internal conversion functions. */ /* 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) if (cygheap->locale.mbtowc == __ascii_mbtowc)
cygheap->locale.mbtowc = __utf8_mbtowc; cygheap->locale.mbtowc = __utf8_mbtowc;
/* Restore CWD and PATH in new charset. */ /* Restore CWD and PATH in new charset. */