Commit 98dd5fd7 authored by Manuel Novoa III 's avatar Manuel Novoa III
Browse files

I broke the libstdc++ locale-enabled build when I hid the definition

of locale_t.  Since I don't want to expose this, for the moment add
some nasty casts to reference the necessary pointer fields for the
ctype information.
parent eab54b6a
Loading
Loading
Loading
Loading
+83 −0
Original line number Diff line number Diff line
@@ -198,3 +198,86 @@ diff -urN gcc-3.3.1-old/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.3.1/libstd
   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) :