diff -urN gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/c_locale.cc gcc-3.3.1/libstdc++-v3/config/locale/gnu/c_locale.cc --- gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/c_locale.cc 2003-02-28 00:09:52.000000000 -0600 +++ gcc-3.3.1/libstdc++-v3/config/locale/gnu/c_locale.cc 2003-08-31 10:55:17.000000000 -0500 @@ -195,12 +195,15 @@ "LC_TIME", "LC_COLLATE", "LC_MONETARY", - "LC_MESSAGES", + "LC_MESSAGES" +#if _GLIBCPP_NUM_CATEGORIES != 0 + , "LC_PAPER", "LC_NAME", "LC_ADDRESS", "LC_TELEPHONE", "LC_MEASUREMENT", "LC_IDENTIFICATION" +#endif }; } // namespace std diff -urN gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/c_locale.h gcc-3.3.1/libstdc++-v3/config/locale/gnu/c_locale.h --- gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/c_locale.h 2003-01-23 12:56:16.000000000 -0600 +++ gcc-3.3.1/libstdc++-v3/config/locale/gnu/c_locale.h 2003-08-31 10:55:17.000000000 -0500 @@ -46,6 +46,10 @@ #define _GLIBCPP_C_LOCALE_GNU 1 #define _GLIBCPP_NUM_CATEGORIES 6 +#ifdef __UCLIBC__ +#undef _GLIBCPP_NUM_CATEGORIES +#define _GLIBCPP_NUM_CATEGORIES 0 +#endif #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) namespace __gnu_cxx diff -urN gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/c++locale_internal.h gcc-3.3.1/libstdc++-v3/config/locale/gnu/c++locale_internal.h --- gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/c++locale_internal.h 2002-09-05 02:46:16.000000000 -0500 +++ gcc-3.3.1/libstdc++-v3/config/locale/gnu/c++locale_internal.h 2003-08-31 10:55:17.000000000 -0500 @@ -48,7 +48,9 @@ extern "C" __typeof(towlower_l) __towlower_l; extern "C" __typeof(towupper_l) __towupper_l; extern "C" __typeof(wcscoll_l) __wcscoll_l; +#ifdef HAVE_WCSFTIME extern "C" __typeof(wcsftime_l) __wcsftime_l; +#endif extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l; extern "C" __typeof(wctype_l) __wctype_l; extern "C" __typeof(newlocale) __newlocale; diff -urN gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/messages_members.cc gcc-3.3.1/libstdc++-v3/config/locale/gnu/messages_members.cc --- gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/messages_members.cc 2003-02-28 00:09:52.000000000 -0600 +++ gcc-3.3.1/libstdc++-v3/config/locale/gnu/messages_members.cc 2003-08-31 10:55:17.000000000 -0500 @@ -36,6 +36,13 @@ #include #include +#ifdef __UCLIBC__ +extern "C" char *__dcgettext(const char *domainname, + const char *msgid, int category); +#undef gettext +#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES) +#endif + namespace std { // Specializations. diff -urN gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/messages_members.h gcc-3.3.1/libstdc++-v3/config/locale/gnu/messages_members.h --- gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/messages_members.h 2003-01-06 16:20:03.000000000 -0600 +++ gcc-3.3.1/libstdc++-v3/config/locale/gnu/messages_members.h 2003-08-31 10:55:17.000000000 -0500 @@ -33,6 +33,12 @@ // Written by Benjamin Kosnik +#ifdef __UCLIBC__ +extern "C" char *__textdomain(const char *domainname); +extern "C" char *__bindtextdomain(const char *domainname, + const char *dirname); +#endif + // Non-virtual member functions. template messages<_CharT>::messages(size_t __refs) @@ -61,7 +67,11 @@ messages<_CharT>::open(const basic_string& __s, const locale& __loc, const char* __dir) const { +#ifdef __UCLIBC__ + __bindtextdomain(__s.c_str(), __dir); +#else bindtextdomain(__s.c_str(), __dir); +#endif return this->do_open(__s, __loc); } @@ -83,7 +93,11 @@ { // No error checking is done, assume the catalog exists and can // be used. +#ifdef __UCLIBC__ + __textdomain(__s.c_str()); +#else textdomain(__s.c_str()); +#endif return 0; } diff -urN gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/numeric_members.cc gcc-3.3.1/libstdc++-v3/config/locale/gnu/numeric_members.cc --- gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/numeric_members.cc 2003-02-28 00:09:52.000000000 -0600 +++ gcc-3.3.1/libstdc++-v3/config/locale/gnu/numeric_members.cc 2003-08-31 10:55:18.000000000 -0500 @@ -86,8 +86,13 @@ else { // Named locale. +#ifdef __UCLIBC__ + _M_decimal_point = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __cloc->decimal_point_wc }).__w); + _M_thousands_sep = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __cloc->thousands_sep_wc }).__w); +#else _M_decimal_point = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w); _M_thousands_sep = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w); +#endif if (_M_thousands_sep == L'\0') _M_grouping = ""; else diff -urN gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/time_members.cc gcc-3.3.1/libstdc++-v3/config/locale/gnu/time_members.cc --- gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/time_members.cc 2003-02-28 00:09:52.000000000 -0600 +++ gcc-3.3.1/libstdc++-v3/config/locale/gnu/time_members.cc 2003-08-31 10:55:18.000000000 -0500 @@ -183,6 +183,7 @@ } } +#ifndef __UCLIBC__ #ifdef _GLIBCPP_USE_WCHAR_T template<> void @@ -328,4 +329,5 @@ } } #endif +#endif } diff -urN gcc-3.3.1-old/libstdc++-v3/config/os/gnu-linux/ctype_base.h gcc-3.3.1/libstdc++-v3/config/os/gnu-linux/ctype_base.h --- gcc-3.3.1-old/libstdc++-v3/config/os/gnu-linux/ctype_base.h 2002-09-09 15:26:41.000000000 -0500 +++ gcc-3.3.1/libstdc++-v3/config/os/gnu-linux/ctype_base.h 2003-08-31 10:55:18.000000000 -0500 @@ -36,11 +36,18 @@ struct ctype_base { // Non-standard typedefs. +#ifdef __UCLIBC__ + typedef const __ctype_touplow_t* __to_type; + // NB: Offsets into ctype::_M_table force a particular size + // on the mask type. Because of this, we don't use an enum. + typedef __ctype_mask_t mask; +#else typedef const int* __to_type; - // NB: Offsets into ctype::_M_table force a particular size // on the mask type. Because of this, we don't use an enum. typedef unsigned short mask; +#endif + static const mask upper = _ISupper; static const mask lower = _ISlower; static const mask alpha = _ISalpha; diff -urN gcc-3.3.1-old/libstdc++-v3/include/c_std/std_cstdlib.h gcc-3.3.1/libstdc++-v3/include/c_std/std_cstdlib.h --- gcc-3.3.1-old/libstdc++-v3/include/c_std/std_cstdlib.h 2003-04-18 05:08:05.000000000 -0500 +++ gcc-3.3.1/libstdc++-v3/include/c_std/std_cstdlib.h 2003-08-31 10:55:18.000000000 -0500 @@ -101,9 +101,11 @@ using ::labs; using ::ldiv; using ::malloc; +#if _GLIBCPP_USE_WCHAR_T using ::mblen; using ::mbstowcs; using ::mbtowc; +#endif using ::qsort; using ::rand; using ::realloc; @@ -112,8 +114,10 @@ using ::strtol; using ::strtoul; using ::system; +#if _GLIBCPP_USE_WCHAR_T using ::wcstombs; using ::wctomb; +#endif inline long abs(long __i) { return labs(__i); } diff -urN gcc-3.3.1-old/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.3.1/libstdc++-v3/include/c_std/std_cwchar.h --- gcc-3.3.1-old/libstdc++-v3/include/c_std/std_cwchar.h 2003-04-18 05:08:05.000000000 -0500 +++ gcc-3.3.1/libstdc++-v3/include/c_std/std_cwchar.h 2003-08-31 10:55:18.000000000 -0500 @@ -165,7 +165,9 @@ using ::wcscoll; using ::wcscpy; using ::wcscspn; +#ifdef HAVE_WCSFTIME using ::wcsftime; +#endif using ::wcslen; using ::wcsncat; using ::wcsncmp; diff -urN gcc-3.3.2-old/libstdc++-v3/config/locale/gnu/ctype_members.cc gcc-3.3.2/libstdc++-v3/config/locale/gnu/ctype_members.cc --- gcc-3.3.2-old/libstdc++-v3/config/locale/gnu/ctype_members.cc 2003-10-07 03:40:58.000000000 -0500 +++ gcc-3.3.2/libstdc++-v3/config/locale/gnu/ctype_members.cc 2003-11-10 14:21:45.000000000 -0600 @@ -36,6 +36,14 @@ #include #include +#ifdef __UCLIBC_HAS_XLOCALE__ +struct __uclibc_locale_struct_header { + const __ctype_mask_t *__ctype_b; + const __ctype_touplow_t *__ctype_tolower; + const __ctype_touplow_t *__ctype_toupper; +}; +#endif + namespace std { // NB: The other ctype specializations are in src/locale.cc and @@ -46,9 +54,9 @@ { _S_destroy_c_locale(_M_c_locale_ctype); _S_create_c_locale(_M_c_locale_ctype, __s); - _M_toupper = _M_c_locale_ctype->__ctype_toupper; - _M_tolower = _M_c_locale_ctype->__ctype_tolower; - _M_table = _M_c_locale_ctype->__ctype_b; + _M_toupper = ((struct __uclibc_locale_struct_header *)_M_c_locale_ctype)->__ctype_toupper; + _M_tolower = ((struct __uclibc_locale_struct_header *)_M_c_locale_ctype)->__ctype_tolower; + _M_table = ((struct __uclibc_locale_struct_header *)_M_c_locale_ctype)->__ctype_b; } #ifdef _GLIBCPP_USE_WCHAR_T diff -urN gcc-3.3.2-old/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h gcc-3.3.2/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h --- gcc-3.3.2-old/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h 2002-10-08 18:32:22.000000000 -0500 +++ gcc-3.3.2/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h 2003-11-10 14:20:37.000000000 -0600 @@ -35,11 +35,21 @@ // Information as gleaned from /usr/include/ctype.h #if _GLIBCPP_C_LOCALE_GNU +#ifdef __UCLIBC_HAS_XLOCALE__ +struct __uclibc_locale_struct_header { + const __ctype_mask_t *__ctype_b; + const __ctype_touplow_t *__ctype_tolower; + const __ctype_touplow_t *__ctype_toupper; +}; +#endif +#endif + +#if _GLIBCPP_C_LOCALE_GNU const ctype_base::mask* ctype::classic_table() throw() { locale::classic(); - return _S_c_locale->__ctype_b; + return ((struct __uclibc_locale_struct_header *)_S_c_locale)->__ctype_b; } #else const ctype_base::mask* @@ -65,9 +75,9 @@ : __ctype_abstract_base(__refs), _M_del(__table != 0 && __del) { _M_c_locale_ctype = _S_clone_c_locale(__cloc); - _M_toupper = _M_c_locale_ctype->__ctype_toupper; - _M_tolower = _M_c_locale_ctype->__ctype_tolower; - _M_table = __table ? __table : _M_c_locale_ctype->__ctype_b; + _M_toupper = ((struct __uclibc_locale_struct_header *)_M_c_locale_ctype)->__ctype_toupper; + _M_tolower = ((struct __uclibc_locale_struct_header *)_M_c_locale_ctype)->__ctype_tolower; + _M_table = __table ? __table : ((struct __uclibc_locale_struct_header *)_M_c_locale_ctype)->__ctype_b; } #else ctype::ctype(__c_locale, const mask* __table, bool __del, @@ -96,9 +106,9 @@ __ctype_abstract_base(__refs), _M_del(__table != 0 && __del) { _M_c_locale_ctype = _S_c_locale; - _M_toupper = _M_c_locale_ctype->__ctype_toupper; - _M_tolower = _M_c_locale_ctype->__ctype_tolower; - _M_table = __table ? __table : _M_c_locale_ctype->__ctype_b; + _M_toupper = ((struct __uclibc_locale_struct_header *)_M_c_locale_ctype)->__ctype_toupper; + _M_tolower = ((struct __uclibc_locale_struct_header *)_M_c_locale_ctype)->__ctype_tolower; + _M_table = __table ? __table : ((struct __uclibc_locale_struct_header *)_M_c_locale_ctype)->__ctype_b; } #else ctype::ctype(const mask* __table, bool __del, size_t __refs) :