diff --git a/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/c++locale_internal.h b/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/c++locale_internal.h index 3ab6af8..81d72f3 100644 --- a/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/c++locale_internal.h +++ b/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/c++locale_internal.h @@ -41,6 +41,107 @@ #include +#ifdef __CYGWIN__ +typedef locale_t __c_locale; +#define __locale_t locale_t +#define __nl_langinfo_l nl_langinfo_l +#define __strcoll_l strcoll_l +#define __strftime_l strftime_l +#define __strtod_l strtod_l +#define __strtof_l strtof_l +#define __strtold_l strtold_l +#define __strxfrm_l strxfrm_l +#define __newlocale newlocale +#define __freelocale freelocale +#define __duplocale duplocale +#define __uselocale uselocale +#ifdef _GLIBCXX_USE_WCHAR_T +#define __iswctype_l iswctype_l +#define __towlower_l towlower_l +#define __towupper_l towupper_l +#define __wcscoll_l wcscoll_l +#define __wcsftime_l wcsftime_l +#define __wcsxfrm_l wcsxfrm_l +#define __wctype_l wctype_l +#endif +// monetary +#define __MON_DECIMAL_POINT _NL_MONETARY_MON_DECIMAL_POINT +#define __MON_THOUSANDS_SEP _NL_MONETARY_MON_THOUSANDS_SEP +#define __INT_FRAC_DIGITS _NL_MONETARY_INT_FRAC_DIGITS +#define __MON_GROUPING _NL_MONETARY_MON_GROUPING +#define __POSITIVE_SIGN _NL_MONETARY_POSITIVE_SIGN +#define __NEGATIVE_SIGN _NL_MONETARY_NEGATIVE_SIGN +#define __INT_CURR_SYMBOL _NL_MONETARY_INT_CURR_SYMBOL +#define __INT_P_SIGN_POSN _NL_MONETARY_INT_P_SIGN_POSN +#define __INT_N_SIGN_POSN _NL_MONETARY_INT_N_SIGN_POSN +#define __INT_P_CS_PRECEDES _NL_MONETARY_INT_P_CS_PRECEDES +#define __INT_N_CS_PRECEDES _NL_MONETARY_INT_N_CS_PRECEDES +#define __INT_P_SEP_BY_SPACE _NL_MONETARY_INT_P_SEP_BY_SPACE +#define __INT_N_SEP_BY_SPACE _NL_MONETARY_INT_N_SEP_BY_SPACE +#define __CURRENCY_SYMBOL _NL_MONETARY_CURRENCY_SYMBOL +#define __P_SIGN_POSN _NL_MONETARY_P_SIGN_POSN +#define __N_SIGN_POSN _NL_MONETARY_N_SIGN_POSN +#define __P_CS_PRECEDES _NL_MONETARY_P_CS_PRECEDES +#define __N_CS_PRECEDES _NL_MONETARY_N_CS_PRECEDES +#define __P_SEP_BY_SPACE _NL_MONETARY_P_SEP_BY_SPACE +#define __N_SEP_BY_SPACE _NL_MONETARY_N_SEP_BY_SPACE +#define __FRAC_DIGITS _NL_MONETARY_FRAC_DIGITS +#define _NL_MONETARY_DECIMAL_POINT_WC _NL_MONETARY_WMON_DECIMAL_POINT +#define _NL_MONETARY_THOUSANDS_SEP_WC _NL_MONETARY_WMON_THOUSANDS_SEP +// numeric +#define DECIMAL_POINT _NL_MONETARY_MON_DECIMAL_POINT // No other appropriate ones. +#define THOUSANDS_SEP _NL_MONETARY_MON_THOUSANDS_SEP // No other appropriate ones. +#define GROUPING _NL_NUMERIC_GROUPING +// time +#define _NL_WD_FMT _NL_TIME_WD_FMT +#define _NL_WD_T_FMT _NL_TIME_WD_T_FMT +#define _NL_WT_FMT _NL_TIME_WT_FMT +#define _NL_WERA_D_FMT _NL_TIME_WERA_D_FMT +#define _NL_WERA_D_T_FMT _NL_TIME_WERA_D_T_FMT +#define _NL_WERA_T_FMT _NL_TIME_WERA_T_FMT +#define _NL_WAM_STR _NL_TIME_WAM_STR +#define _NL_WPM_STR _NL_TIME_WPM_STR +#define _NL_WT_FMT_AMPM _NL_TIME_WT_FMT_AMPM +#define _NL_WDAY_1 _NL_TIME_WWEEKDAY_1 +#define _NL_WDAY_2 _NL_TIME_WWEEKDAY_2 +#define _NL_WDAY_3 _NL_TIME_WWEEKDAY_3 +#define _NL_WDAY_4 _NL_TIME_WWEEKDAY_4 +#define _NL_WDAY_5 _NL_TIME_WWEEKDAY_5 +#define _NL_WDAY_6 _NL_TIME_WWEEKDAY_6 +#define _NL_WDAY_7 _NL_TIME_WWEEKDAY_7 +#define _NL_WABDAY_1 _NL_TIME_WWDAY_1 +#define _NL_WABDAY_2 _NL_TIME_WWDAY_2 +#define _NL_WABDAY_3 _NL_TIME_WWDAY_3 +#define _NL_WABDAY_4 _NL_TIME_WWDAY_4 +#define _NL_WABDAY_5 _NL_TIME_WWDAY_5 +#define _NL_WABDAY_6 _NL_TIME_WWDAY_6 +#define _NL_WABDAY_7 _NL_TIME_WWDAY_7 +#define _NL_WMON_1 _NL_TIME_WMONTH_1 +#define _NL_WMON_2 _NL_TIME_WMONTH_2 +#define _NL_WMON_3 _NL_TIME_WMONTH_3 +#define _NL_WMON_4 _NL_TIME_WMONTH_4 +#define _NL_WMON_5 _NL_TIME_WMONTH_5 +#define _NL_WMON_6 _NL_TIME_WMONTH_6 +#define _NL_WMON_7 _NL_TIME_WMONTH_7 +#define _NL_WMON_8 _NL_TIME_WMONTH_8 +#define _NL_WMON_9 _NL_TIME_WMONTH_9 +#define _NL_WMON_10 _NL_TIME_WMONTH_10 +#define _NL_WMON_11 _NL_TIME_WMONTH_11 +#define _NL_WMON_12 _NL_TIME_WMONTH_12 +#define _NL_WABMON_1 _NL_TIME_WMON_1 +#define _NL_WABMON_2 _NL_TIME_WMON_2 +#define _NL_WABMON_3 _NL_TIME_WMON_3 +#define _NL_WABMON_4 _NL_TIME_WMON_4 +#define _NL_WABMON_5 _NL_TIME_WMON_5 +#define _NL_WABMON_6 _NL_TIME_WMON_6 +#define _NL_WABMON_7 _NL_TIME_WMON_7 +#define _NL_WABMON_8 _NL_TIME_WMON_8 +#define _NL_WABMON_9 _NL_TIME_WMON_9 +#define _NL_WABMON_10 _NL_TIME_WMON_10 +#define _NL_WABMON_11 _NL_TIME_WMON_11 +#define _NL_WABMON_12 _NL_TIME_WMON_12 +#else // __CYGWIN__ + #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l; @@ -67,6 +168,8 @@ extern "C" __typeof(wctype_l) __wctype_l; #endif // GLIBC 2.3 and later +#endif // __CYGWIN__ + namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION diff --git a/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/c_locale.cc b/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/c_locale.cc index 45437e7..177882c 100644 --- a/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/c_locale.cc +++ b/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/c_locale.cc @@ -28,6 +28,9 @@ // Written by Benjamin Kosnik +#ifdef __CYGWIN__ +#define _GNU_SOURCE 1 +#endif #include #include #include diff --git a/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/c_locale.h b/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/c_locale.h index bc24355..6f13e06 100644 --- a/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/c_locale.h +++ b/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/c_locale.h @@ -49,7 +49,11 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION +#ifdef __CYGWIN__ +#define __uselocale uselocale +#else extern "C" __typeof(uselocale) __uselocale; +#endif _GLIBCXX_END_NAMESPACE_VERSION } // namespace @@ -59,7 +63,11 @@ namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION +#ifdef __CYGWIN__ + typedef locale_t __c_locale; +#else typedef __locale_t __c_locale; +#endif // Convert numeric value of type double and long double to string and // return length of string. If vsnprintf is available use it, otherwise diff --git a/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/ctype_members.cc b/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/ctype_members.cc index e7a66f1..ee3c236 100644 --- a/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/ctype_members.cc +++ b/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/ctype_members.cc @@ -32,6 +32,15 @@ #include #include +#ifdef __CYGWIN__ +# include +# if __BYTE_ORDER == __BIG_ENDIAN +# define _ISbit(bit) (1 << (bit)) +# else /* __BYTE_ORDER == __LITTLE_ENDIAN */ +# define _ISbit(bit) ((bit) < 8 ? ((1 << (bit)) << 8) : ((1 << (bit)) >> 8)) +# endif +#endif + namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -45,9 +54,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { this->_S_destroy_c_locale(this->_M_c_locale_ctype); this->_S_create_c_locale(this->_M_c_locale_ctype, __s); +#ifndef __CYGWIN__ this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper; this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower; this->_M_table = this->_M_c_locale_ctype->__ctype_b; +#endif } } @@ -94,9 +105,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION case graph: __ret = __wctype_l("graph", _M_c_locale_ctype); break; +#ifndef __CYGWIN__ case blank: __ret = __wctype_l("blank", _M_c_locale_ctype); break; +#endif default: __ret = __wmask_type(); } diff --git a/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/monetary_members.cc b/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/monetary_members.cc index 0b7e0ec..05c4161 100644 --- a/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/monetary_members.cc +++ b/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/monetary_members.cc @@ -596,12 +596,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION setlocale(LC_ALL, __name); #endif +#ifdef __CYGWIN__ + union { char *__s; wchar_t *__w; } __u; + __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc); + _M_data->_M_decimal_point = *__u.__w; + + __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc); + _M_data->_M_thousands_sep = *__u.__w; +#else union { char *__s; wchar_t __w; } __u; __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc); _M_data->_M_decimal_point = __u.__w; __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc); _M_data->_M_thousands_sep = __u.__w; +#endif // Check for NULL, which implies no fractional digits. if (_M_data->_M_decimal_point == L'\0') diff --git a/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/numeric_members.cc b/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/numeric_members.cc index 19bf7d1..a793140 100644 --- a/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/numeric_members.cc +++ b/src/gcc-11.4.0/libstdc++-v3/config/locale/generic/numeric_members.cc @@ -206,6 +206,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION else { // Named locale. +#ifdef __CYGWIN__ + union { char *__s; wchar_t *__w; } __u; + __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc); + _M_data->_M_decimal_point = *__u.__w; + + __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc); + _M_data->_M_thousands_sep = *__u.__w; +#else // NB: In the GNU model wchar_t is always 32 bit wide. union { char *__s; wchar_t __w; } __u; __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc); @@ -213,6 +221,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc); _M_data->_M_thousands_sep = __u.__w; +#endif // Check for NULL, which implies no grouping. if (_M_data->_M_thousands_sep == L'\0')