]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/uClibc/sources/gcc-810-libstd++-locale.patch
git-svn-id: http://svn.ipfire.org/svn/ipfire/IPFire/source@16 ea5c0bd1-69bd-2848...
[people/pmueller/ipfire-2.x.git] / src / uClibc / sources / gcc-810-libstd++-locale.patch
diff --git a/src/uClibc/sources/gcc-810-libstd++-locale.patch b/src/uClibc/sources/gcc-810-libstd++-locale.patch
new file mode 100644 (file)
index 0000000..d43b950
--- /dev/null
@@ -0,0 +1,283 @@
+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 <locale>
+ #include <bits/c++locale_internal.h>
++#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 <bkoz@redhat.com>
++#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<typename _CharT>
+      messages<_CharT>::messages(size_t __refs)
+@@ -61,7 +67,11 @@
+     messages<_CharT>::open(const basic_string<char>& __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<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __cloc->decimal_point_wc }).__w);
++        _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __cloc->thousands_sep_wc }).__w);
++#else
+         _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
+         _M_thousands_sep = static_cast<wchar_t>(((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<char>::_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<char>::_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 <locale>
+ #include <bits/c++locale_internal.h>
++#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<char> 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<char>::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<char>(__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<char>::ctype(__c_locale, const mask* __table, bool __del, 
+@@ -96,9 +106,9 @@
+   __ctype_abstract_base<char>(__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<char>::ctype(const mask* __table, bool __del, size_t __refs) :