diff --git a/newlib/libc/ctype/jp2uc.c b/newlib/libc/ctype/jp2uc.c index 40d777add..f5bd7dbf2 100644 --- a/newlib/libc/ctype/jp2uc.c +++ b/newlib/libc/ctype/jp2uc.c @@ -154,11 +154,11 @@ _DEFUN (__jp2uc, (c, type), wint_t c _AND int type) wint_t _DEFUN (_jp2uc, (c), wint_t c) { - if (!strcmp (__locale_charset (), "JIS")) + if (!strcmp (__current_locale_charset (), "JIS")) c = __jp2uc (c, JP_JIS); - else if (!strcmp (__locale_charset (), "SJIS")) + else if (!strcmp (__current_locale_charset (), "SJIS")) c = __jp2uc (c, JP_SJIS); - else if (!strcmp (__locale_charset (), "EUCJP")) + else if (!strcmp (__current_locale_charset (), "EUCJP")) c = __jp2uc (c, JP_EUCJP); return c; } diff --git a/newlib/libc/locale/nl_langinfo.c b/newlib/libc/locale/nl_langinfo.c index c7e27cfb7..5acfb9a32 100644 --- a/newlib/libc/locale/nl_langinfo.c +++ b/newlib/libc/locale/nl_langinfo.c @@ -212,7 +212,7 @@ _DEFUN(nl_langinfo, (item), #endif /* __HAVE_LOCALE_INFO__ */ case CODESET: #ifdef __CYGWIN__ - ret = (char *) __locale_charset (); + ret = (char *) __current_locale_charset (); #endif do_codeset: #ifdef __CYGWIN__ diff --git a/newlib/libc/locale/setlocale.h b/newlib/libc/locale/setlocale.h index 4275750ec..99bd4668b 100644 --- a/newlib/libc/locale/setlocale.h +++ b/newlib/libc/locale/setlocale.h @@ -373,7 +373,17 @@ __get_current_messages_locale (void) #endif /* !__HAVE_LOCALE_INFO__ */ _ELIDABLE_INLINE const char * -__locale_charset (void) +__locale_charset (struct __locale_t *locale) +{ +#ifdef __HAVE_LOCALE_INFO__ + return __get_ctype_locale (locale)->codeset; +#else + return locale->ctype_codeset; +#endif +} + +_ELIDABLE_INLINE const char * +__current_locale_charset (void) { #ifdef __HAVE_LOCALE_INFO__ return __get_current_ctype_locale ()->codeset; diff --git a/winsup/cygwin/nlsfuncs.cc b/winsup/cygwin/nlsfuncs.cc index 9ff1ef2b8..3e3b5f42a 100644 --- a/winsup/cygwin/nlsfuncs.cc +++ b/winsup/cygwin/nlsfuncs.cc @@ -1527,7 +1527,8 @@ internal_setlocale () if (cygheap->locale.mbtowc == __global_locale.mbtowc) return; - debug_printf ("Cygwin charset chang to %s", __locale_charset ()); + debug_printf ("Global charset set to %s", + __locale_charset (&__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. */ diff --git a/winsup/cygwin/regex/regcomp.c b/winsup/cygwin/regex/regcomp.c index 0dc59ffcc..63ca4f131 100644 --- a/winsup/cygwin/regex/regcomp.c +++ b/winsup/cygwin/regex/regcomp.c @@ -1132,7 +1132,7 @@ wgetnext(struct parse *p) invalid ASCII chars. To be more Linux-compatible, we align the behaviour to glibc here. Allow any character value if the current local's codeset is ASCII. */ - if (*__locale_charset () == 'A') /* SCII */ + if (*__current_locale_charset () == 'A') /* SCII */ return (wint_t) (unsigned char) *p->next++; #endif memset(&mbs, 0, sizeof(mbs)); @@ -1503,7 +1503,7 @@ findmust(struct parse *p, struct re_guts *g) */ if (MB_CUR_MAX > 1 && #ifdef __CYGWIN__ - strcmp(__locale_charset (), "UTF-8") != 0) + strcmp(__current_locale_charset (), "UTF-8") != 0) #else strcmp(_CurrentRuneLocale->__encoding, "UTF-8") != 0) #endif