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;