patches/gcc/4.0.4/200-uclibc-locale.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Feb 24 11:00:05 2007 +0000 (2007-02-24)
changeset 1 eeea35fbf182
permissions -rw-r--r--
Add the full crosstool-NG sources to the new repository of its own.
You might just say: 'Yeah! crosstool-NG's got its own repo!".
Unfortunately, that's because the previous repo got damaged beyond repair and I had no backup.
That means I'm putting backups in place in the afternoon.
That also means we've lost history... :-(
     1 diff -urN gcc-4.0.0-100/libstdc++-v3/acinclude.m4 gcc-4.0.0/libstdc++-v3/acinclude.m4
     2 --- gcc-4.0.0-100/libstdc++-v3/acinclude.m4	2005-04-30 13:06:53.000000000 -0500
     3 +++ gcc-4.0.0/libstdc++-v3/acinclude.m4	2005-04-28 20:19:01.000000000 -0500
     4 @@ -1104,7 +1104,7 @@
     5    AC_MSG_CHECKING([for C locale to use])
     6    GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
     7      [use MODEL for target locale package],
     8 -    [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
     9 +    [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
    10    
    11    # If they didn't use this option switch, or if they specified --enable
    12    # with no specific model, we'll have to look for one.  If they
    13 @@ -1120,6 +1120,9 @@
    14    # Default to "generic".
    15    if test $enable_clocale_flag = auto; then
    16      case ${target_os} in
    17 +      *-uclibc*)
    18 +        enable_clocale_flag=uclibc
    19 +        ;;
    20        linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
    21          AC_EGREP_CPP([_GLIBCXX_ok], [
    22          #include <features.h>
    23 @@ -1263,6 +1266,40 @@
    24        CTIME_CC=config/locale/generic/time_members.cc
    25        CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
    26        ;;
    27 +    uclibc)
    28 +      AC_MSG_RESULT(uclibc)
    29 +
    30 +      # Declare intention to use gettext, and add support for specific
    31 +      # languages.
    32 +      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
    33 +      ALL_LINGUAS="de fr"
    34 +
    35 +      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
    36 +      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
    37 +      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
    38 +        USE_NLS=yes
    39 +      fi
    40 +      # Export the build objects.
    41 +      for ling in $ALL_LINGUAS; do \
    42 +        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
    43 +        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
    44 +      done
    45 +      AC_SUBST(glibcxx_MOFILES)
    46 +      AC_SUBST(glibcxx_POFILES)
    47 +
    48 +      CLOCALE_H=config/locale/uclibc/c_locale.h
    49 +      CLOCALE_CC=config/locale/uclibc/c_locale.cc
    50 +      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
    51 +      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
    52 +      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
    53 +      CMESSAGES_H=config/locale/uclibc/messages_members.h
    54 +      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
    55 +      CMONEY_CC=config/locale/uclibc/monetary_members.cc
    56 +      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
    57 +      CTIME_H=config/locale/uclibc/time_members.h
    58 +      CTIME_CC=config/locale/uclibc/time_members.cc
    59 +      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
    60 +      ;;
    61    esac
    62  
    63    # This is where the testsuite looks for locale catalogs, using the
    64 diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
    65 --- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	1969-12-31 18:00:00.000000000 -0600
    66 +++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	2005-04-28 01:13:15.000000000 -0500
    67 @@ -0,0 +1,59 @@
    68 +// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
    69 +
    70 +// Copyright (C) 2002, 2004 Free Software Foundation, Inc.
    71 +//
    72 +// This file is part of the GNU ISO C++ Library.  This library is free
    73 +// software; you can redistribute it and/or modify it under the
    74 +// terms of the GNU General Public License as published by the
    75 +// Free Software Foundation; either version 2, or (at your option)
    76 +// any later version.
    77 +
    78 +// This library is distributed in the hope that it will be useful,
    79 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
    80 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    81 +// GNU General Public License for more details.
    82 +
    83 +// You should have received a copy of the GNU General Public License along
    84 +// with this library; see the file COPYING.  If not, write to the Free
    85 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
    86 +// USA.
    87 +
    88 +// As a special exception, you may use this file as part of a free software
    89 +// library without restriction.  Specifically, if other files instantiate
    90 +// templates or use macros or inline functions from this file, or you compile
    91 +// this file and link it with other files to produce an executable, this
    92 +// file does not by itself cause the resulting executable to be covered by
    93 +// the GNU General Public License.  This exception does not however
    94 +// invalidate any other reasons why the executable file might be covered by
    95 +// the GNU General Public License.
    96 +
    97 +// Written by Jakub Jelinek <jakub@redhat.com>
    98 +
    99 +#include <clocale>
   100 +
   101 +#ifdef __UCLIBC_MJN3_ONLY__
   102 +#warning clean this up
   103 +#endif
   104 +
   105 +#ifdef __UCLIBC_HAS_XLOCALE__
   106 +                                                  
   107 +extern "C" __typeof(iswctype_l) __iswctype_l;
   108 +extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
   109 +extern "C" __typeof(strcoll_l) __strcoll_l;
   110 +extern "C" __typeof(strftime_l) __strftime_l;
   111 +extern "C" __typeof(strtod_l) __strtod_l;
   112 +extern "C" __typeof(strtof_l) __strtof_l;
   113 +extern "C" __typeof(strtold_l) __strtold_l;
   114 +extern "C" __typeof(strxfrm_l) __strxfrm_l;
   115 +extern "C" __typeof(towlower_l) __towlower_l;
   116 +extern "C" __typeof(towupper_l) __towupper_l;
   117 +extern "C" __typeof(wcscoll_l) __wcscoll_l;
   118 +extern "C" __typeof(wcsftime_l) __wcsftime_l;
   119 +extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
   120 +extern "C" __typeof(wctype_l) __wctype_l;
   121 +extern "C" __typeof(newlocale) __newlocale;
   122 +extern "C" __typeof(freelocale) __freelocale;
   123 +extern "C" __typeof(duplocale) __duplocale;
   124 +extern "C" __typeof(uselocale) __uselocale;
   125 +
   126 +#endif // GLIBC 2.3 and later
   127 diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
   128 --- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c_locale.cc	1969-12-31 18:00:00.000000000 -0600
   129 +++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c_locale.cc	2005-04-28 01:13:15.000000000 -0500
   130 @@ -0,0 +1,160 @@
   131 +// Wrapper for underlying C-language localization -*- C++ -*-
   132 +
   133 +// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
   134 +//
   135 +// This file is part of the GNU ISO C++ Library.  This library is free
   136 +// software; you can redistribute it and/or modify it under the
   137 +// terms of the GNU General Public License as published by the
   138 +// Free Software Foundation; either version 2, or (at your option)
   139 +// any later version.
   140 +
   141 +// This library is distributed in the hope that it will be useful,
   142 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
   143 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   144 +// GNU General Public License for more details.
   145 +
   146 +// You should have received a copy of the GNU General Public License along
   147 +// with this library; see the file COPYING.  If not, write to the Free
   148 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   149 +// USA.
   150 +
   151 +// As a special exception, you may use this file as part of a free software
   152 +// library without restriction.  Specifically, if other files instantiate
   153 +// templates or use macros or inline functions from this file, or you compile
   154 +// this file and link it with other files to produce an executable, this
   155 +// file does not by itself cause the resulting executable to be covered by
   156 +// the GNU General Public License.  This exception does not however
   157 +// invalidate any other reasons why the executable file might be covered by
   158 +// the GNU General Public License.
   159 +
   160 +//
   161 +// ISO C++ 14882: 22.8  Standard locale categories.
   162 +//
   163 +
   164 +// Written by Benjamin Kosnik <bkoz@redhat.com>
   165 +
   166 +#include <cerrno>  // For errno
   167 +#include <locale>
   168 +#include <stdexcept>
   169 +#include <langinfo.h>
   170 +#include <bits/c++locale_internal.h>
   171 +
   172 +#ifndef __UCLIBC_HAS_XLOCALE__
   173 +#define __strtol_l(S, E, B, L)      strtol((S), (E), (B))
   174 +#define __strtoul_l(S, E, B, L)     strtoul((S), (E), (B))
   175 +#define __strtoll_l(S, E, B, L)     strtoll((S), (E), (B))
   176 +#define __strtoull_l(S, E, B, L)    strtoull((S), (E), (B))
   177 +#define __strtof_l(S, E, L)         strtof((S), (E))
   178 +#define __strtod_l(S, E, L)         strtod((S), (E))
   179 +#define __strtold_l(S, E, L)        strtold((S), (E))
   180 +#warning should dummy __newlocale check for C|POSIX ?
   181 +#define __newlocale(a, b, c)        NULL
   182 +#define __freelocale(a)             ((void)0)
   183 +#define __duplocale(a)              __c_locale()
   184 +#endif
   185 +
   186 +namespace std 
   187 +{
   188 +  template<>
   189 +    void
   190 +    __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, 
   191 +		   const __c_locale& __cloc)
   192 +    {
   193 +      if (!(__err & ios_base::failbit))
   194 +	{
   195 +	  char* __sanity;
   196 +	  errno = 0;
   197 +	  float __f = __strtof_l(__s, &__sanity, __cloc);
   198 +          if (__sanity != __s && errno != ERANGE)
   199 +	    __v = __f;
   200 +	  else
   201 +	    __err |= ios_base::failbit;
   202 +	}
   203 +    }
   204 +
   205 +  template<>
   206 +    void
   207 +    __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, 
   208 +		   const __c_locale& __cloc)
   209 +    {
   210 +      if (!(__err & ios_base::failbit))
   211 +	{
   212 +	  char* __sanity;
   213 +	  errno = 0;
   214 +	  double __d = __strtod_l(__s, &__sanity, __cloc);
   215 +          if (__sanity != __s && errno != ERANGE)
   216 +	    __v = __d;
   217 +	  else
   218 +	    __err |= ios_base::failbit;
   219 +	}
   220 +    }
   221 +
   222 +  template<>
   223 +    void
   224 +    __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
   225 +		   const __c_locale& __cloc)
   226 +    {
   227 +      if (!(__err & ios_base::failbit))
   228 +	{
   229 +	  char* __sanity;
   230 +	  errno = 0;
   231 +	  long double __ld = __strtold_l(__s, &__sanity, __cloc);
   232 +          if (__sanity != __s && errno != ERANGE)
   233 +	    __v = __ld;
   234 +	  else
   235 +	    __err |= ios_base::failbit;
   236 +	}
   237 +    }
   238 +
   239 +  void
   240 +  locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s, 
   241 +				    __c_locale __old)
   242 +  {
   243 +    __cloc = __newlocale(1 << LC_ALL, __s, __old);
   244 +#ifdef __UCLIBC_HAS_XLOCALE__
   245 +    if (!__cloc)
   246 +      {
   247 +	// This named locale is not supported by the underlying OS.
   248 +	__throw_runtime_error(__N("locale::facet::_S_create_c_locale "
   249 +			      "name not valid"));
   250 +      }
   251 +#endif
   252 +  }
   253 +  
   254 +  void
   255 +  locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
   256 +  {
   257 +    if (_S_get_c_locale() != __cloc)
   258 +      __freelocale(__cloc); 
   259 +  }
   260 +
   261 +  __c_locale
   262 +  locale::facet::_S_clone_c_locale(__c_locale& __cloc)
   263 +  { return __duplocale(__cloc); }
   264 +} // namespace std
   265 +
   266 +namespace __gnu_cxx
   267 +{
   268 +  const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
   269 +    {
   270 +      "LC_CTYPE", 
   271 +      "LC_NUMERIC",
   272 +      "LC_TIME", 
   273 +      "LC_COLLATE", 
   274 +      "LC_MONETARY",
   275 +      "LC_MESSAGES", 
   276 +#if _GLIBCXX_NUM_CATEGORIES != 0
   277 +      "LC_PAPER", 
   278 +      "LC_NAME", 
   279 +      "LC_ADDRESS",
   280 +      "LC_TELEPHONE", 
   281 +      "LC_MEASUREMENT", 
   282 +      "LC_IDENTIFICATION" 
   283 +#endif
   284 +    };
   285 +}
   286 +
   287 +namespace std
   288 +{
   289 +  const char* const* const locale::_S_categories = __gnu_cxx::category_names;
   290 +}  // namespace std
   291 diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c_locale.h
   292 --- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c_locale.h	1969-12-31 18:00:00.000000000 -0600
   293 +++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c_locale.h	2005-04-28 01:13:15.000000000 -0500
   294 @@ -0,0 +1,115 @@
   295 +// Wrapper for underlying C-language localization -*- C++ -*-
   296 +
   297 +// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
   298 +//
   299 +// This file is part of the GNU ISO C++ Library.  This library is free
   300 +// software; you can redistribute it and/or modify it under the
   301 +// terms of the GNU General Public License as published by the
   302 +// Free Software Foundation; either version 2, or (at your option)
   303 +// any later version.
   304 +
   305 +// This library is distributed in the hope that it will be useful,
   306 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
   307 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   308 +// GNU General Public License for more details.
   309 +
   310 +// You should have received a copy of the GNU General Public License along
   311 +// with this library; see the file COPYING.  If not, write to the Free
   312 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   313 +// USA.
   314 +
   315 +// As a special exception, you may use this file as part of a free software
   316 +// library without restriction.  Specifically, if other files instantiate
   317 +// templates or use macros or inline functions from this file, or you compile
   318 +// this file and link it with other files to produce an executable, this
   319 +// file does not by itself cause the resulting executable to be covered by
   320 +// the GNU General Public License.  This exception does not however
   321 +// invalidate any other reasons why the executable file might be covered by
   322 +// the GNU General Public License.
   323 +
   324 +//
   325 +// ISO C++ 14882: 22.8  Standard locale categories.
   326 +//
   327 +
   328 +// Written by Benjamin Kosnik <bkoz@redhat.com>
   329 +
   330 +#ifndef _C_LOCALE_H
   331 +#define _C_LOCALE_H 1
   332 +
   333 +#pragma GCC system_header
   334 +
   335 +#include <cstring>              // get std::strlen
   336 +#include <cstdio>               // get std::snprintf or std::sprintf
   337 +#include <clocale>
   338 +#include <langinfo.h>		// For codecvt
   339 +#ifdef __UCLIBC_MJN3_ONLY__
   340 +#warning fix this
   341 +#endif
   342 +#ifdef __UCLIBC_HAS_LOCALE__
   343 +#include <iconv.h>		// For codecvt using iconv, iconv_t
   344 +#endif
   345 +#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
   346 +#include <libintl.h> 		// For messages
   347 +#endif
   348 +
   349 +#ifdef __UCLIBC_MJN3_ONLY__
   350 +#warning what is _GLIBCXX_C_LOCALE_GNU for
   351 +#endif
   352 +#define _GLIBCXX_C_LOCALE_GNU 1
   353 +
   354 +#ifdef __UCLIBC_MJN3_ONLY__
   355 +#warning fix categories
   356 +#endif
   357 +// #define _GLIBCXX_NUM_CATEGORIES 6
   358 +#define _GLIBCXX_NUM_CATEGORIES 0
   359 + 
   360 +#ifdef __UCLIBC_HAS_XLOCALE__
   361 +namespace __gnu_cxx
   362 +{
   363 +  extern "C" __typeof(uselocale) __uselocale;
   364 +}
   365 +#endif
   366 +
   367 +namespace std
   368 +{
   369 +#ifdef __UCLIBC_HAS_XLOCALE__
   370 +  typedef __locale_t		__c_locale;
   371 +#else
   372 +  typedef int*			__c_locale;
   373 +#endif
   374 +
   375 +  // Convert numeric value of type _Tv to string and return length of
   376 +  // string.  If snprintf is available use it, otherwise fall back to
   377 +  // the unsafe sprintf which, in general, can be dangerous and should
   378 +  // be avoided.
   379 +  template<typename _Tv>
   380 +    int
   381 +    __convert_from_v(char* __out, const int __size, const char* __fmt,
   382 +#ifdef __UCLIBC_HAS_XLOCALE__
   383 +		     _Tv __v, const __c_locale& __cloc, int __prec)
   384 +    {
   385 +      __c_locale __old = __gnu_cxx::__uselocale(__cloc);
   386 +#else
   387 +		     _Tv __v, const __c_locale&, int __prec)
   388 +    {
   389 +# ifdef __UCLIBC_HAS_LOCALE__
   390 +      char* __old = std::setlocale(LC_ALL, NULL);
   391 +      char* __sav = new char[std::strlen(__old) + 1];
   392 +      std::strcpy(__sav, __old);
   393 +      std::setlocale(LC_ALL, "C");
   394 +# endif
   395 +#endif
   396 +
   397 +      const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
   398 +
   399 +#ifdef __UCLIBC_HAS_XLOCALE__
   400 +      __gnu_cxx::__uselocale(__old);
   401 +#elif defined __UCLIBC_HAS_LOCALE__
   402 +      std::setlocale(LC_ALL, __sav);
   403 +      delete [] __sav;
   404 +#endif
   405 +      return __ret;
   406 +    }
   407 +}
   408 +
   409 +#endif
   410 diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
   411 --- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	1969-12-31 18:00:00.000000000 -0600
   412 +++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	2005-04-28 01:13:15.000000000 -0500
   413 @@ -0,0 +1,306 @@
   414 +// std::codecvt implementation details, GNU version -*- C++ -*-
   415 +
   416 +// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
   417 +//
   418 +// This file is part of the GNU ISO C++ Library.  This library is free
   419 +// software; you can redistribute it and/or modify it under the
   420 +// terms of the GNU General Public License as published by the
   421 +// Free Software Foundation; either version 2, or (at your option)
   422 +// any later version.
   423 +
   424 +// This library is distributed in the hope that it will be useful,
   425 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
   426 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   427 +// GNU General Public License for more details.
   428 +
   429 +// You should have received a copy of the GNU General Public License along
   430 +// with this library; see the file COPYING.  If not, write to the Free
   431 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   432 +// USA.
   433 +
   434 +// As a special exception, you may use this file as part of a free software
   435 +// library without restriction.  Specifically, if other files instantiate
   436 +// templates or use macros or inline functions from this file, or you compile
   437 +// this file and link it with other files to produce an executable, this
   438 +// file does not by itself cause the resulting executable to be covered by
   439 +// the GNU General Public License.  This exception does not however
   440 +// invalidate any other reasons why the executable file might be covered by
   441 +// the GNU General Public License.
   442 +
   443 +//
   444 +// ISO C++ 14882: 22.2.1.5 - Template class codecvt
   445 +//
   446 +
   447 +// Written by Benjamin Kosnik <bkoz@redhat.com>
   448 +
   449 +#include <locale>
   450 +#include <bits/c++locale_internal.h>
   451 +
   452 +namespace std
   453 +{
   454 +  // Specializations.
   455 +#ifdef _GLIBCXX_USE_WCHAR_T
   456 +  codecvt_base::result
   457 +  codecvt<wchar_t, char, mbstate_t>::
   458 +  do_out(state_type& __state, const intern_type* __from, 
   459 +	 const intern_type* __from_end, const intern_type*& __from_next,
   460 +	 extern_type* __to, extern_type* __to_end,
   461 +	 extern_type*& __to_next) const
   462 +  {
   463 +    result __ret = ok;
   464 +    state_type __tmp_state(__state);
   465 +
   466 +#ifdef __UCLIBC_HAS_XLOCALE__
   467 +    __c_locale __old = __uselocale(_M_c_locale_codecvt);
   468 +#endif
   469 +
   470 +    // wcsnrtombs is *very* fast but stops if encounters NUL characters:
   471 +    // in case we fall back to wcrtomb and then continue, in a loop.
   472 +    // NB: wcsnrtombs is a GNU extension
   473 +    for (__from_next = __from, __to_next = __to;
   474 +	 __from_next < __from_end && __to_next < __to_end
   475 +	 && __ret == ok;)
   476 +      {
   477 +	const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
   478 +						      __from_end - __from_next);
   479 +	if (!__from_chunk_end)
   480 +	  __from_chunk_end = __from_end;
   481 +
   482 +	__from = __from_next;
   483 +	const size_t __conv = wcsnrtombs(__to_next, &__from_next,
   484 +					 __from_chunk_end - __from_next,
   485 +					 __to_end - __to_next, &__state);
   486 +	if (__conv == static_cast<size_t>(-1))
   487 +	  {
   488 +	    // In case of error, in order to stop at the exact place we
   489 +	    // have to start again from the beginning with a series of
   490 +	    // wcrtomb.
   491 +	    for (; __from < __from_next; ++__from)
   492 +	      __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
   493 +	    __state = __tmp_state;
   494 +	    __ret = error;
   495 +	  }
   496 +	else if (__from_next && __from_next < __from_chunk_end)
   497 +	  {
   498 +	    __to_next += __conv;
   499 +	    __ret = partial;
   500 +	  }
   501 +	else
   502 +	  {
   503 +	    __from_next = __from_chunk_end;
   504 +	    __to_next += __conv;
   505 +	  }
   506 +
   507 +	if (__from_next < __from_end && __ret == ok)
   508 +	  {
   509 +	    extern_type __buf[MB_LEN_MAX];
   510 +	    __tmp_state = __state;
   511 +	    const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
   512 +	    if (__conv > static_cast<size_t>(__to_end - __to_next))
   513 +	      __ret = partial;
   514 +	    else
   515 +	      {
   516 +		memcpy(__to_next, __buf, __conv);
   517 +		__state = __tmp_state;
   518 +		__to_next += __conv;
   519 +		++__from_next;
   520 +	      }
   521 +	  }
   522 +      }
   523 +
   524 +#ifdef __UCLIBC_HAS_XLOCALE__
   525 +    __uselocale(__old);
   526 +#endif
   527 +
   528 +    return __ret; 
   529 +  }
   530 +  
   531 +  codecvt_base::result
   532 +  codecvt<wchar_t, char, mbstate_t>::
   533 +  do_in(state_type& __state, const extern_type* __from, 
   534 +	const extern_type* __from_end, const extern_type*& __from_next,
   535 +	intern_type* __to, intern_type* __to_end,
   536 +	intern_type*& __to_next) const
   537 +  {
   538 +    result __ret = ok;
   539 +    state_type __tmp_state(__state);
   540 +
   541 +#ifdef __UCLIBC_HAS_XLOCALE__
   542 +    __c_locale __old = __uselocale(_M_c_locale_codecvt);
   543 +#endif
   544 +
   545 +    // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
   546 +    // in case we store a L'\0' and then continue, in a loop.
   547 +    // NB: mbsnrtowcs is a GNU extension
   548 +    for (__from_next = __from, __to_next = __to;
   549 +	 __from_next < __from_end && __to_next < __to_end
   550 +	 && __ret == ok;)
   551 +      {
   552 +	const extern_type* __from_chunk_end;
   553 +	__from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
   554 +								  __from_end
   555 +								  - __from_next));
   556 +	if (!__from_chunk_end)
   557 +	  __from_chunk_end = __from_end;
   558 +
   559 +	__from = __from_next;
   560 +	size_t __conv = mbsnrtowcs(__to_next, &__from_next,
   561 +				   __from_chunk_end - __from_next,
   562 +				   __to_end - __to_next, &__state);
   563 +	if (__conv == static_cast<size_t>(-1))
   564 +	  {
   565 +	    // In case of error, in order to stop at the exact place we
   566 +	    // have to start again from the beginning with a series of
   567 +	    // mbrtowc.
   568 +	    for (;; ++__to_next, __from += __conv)
   569 +	      {
   570 +		__conv = mbrtowc(__to_next, __from, __from_end - __from,
   571 +				 &__tmp_state);
   572 +		if (__conv == static_cast<size_t>(-1)
   573 +		    || __conv == static_cast<size_t>(-2))
   574 +		  break;
   575 +	      }
   576 +	    __from_next = __from;
   577 +	    __state = __tmp_state;	    
   578 +	    __ret = error;
   579 +	  }
   580 +	else if (__from_next && __from_next < __from_chunk_end)
   581 +	  {
   582 +	    // It is unclear what to return in this case (see DR 382). 
   583 +	    __to_next += __conv;
   584 +	    __ret = partial;
   585 +	  }
   586 +	else
   587 +	  {
   588 +	    __from_next = __from_chunk_end;
   589 +	    __to_next += __conv;
   590 +	  }
   591 +
   592 +	if (__from_next < __from_end && __ret == ok)
   593 +	  {
   594 +	    if (__to_next < __to_end)
   595 +	      {
   596 +		// XXX Probably wrong for stateful encodings
   597 +		__tmp_state = __state;		
   598 +		++__from_next;
   599 +		*__to_next++ = L'\0';
   600 +	      }
   601 +	    else
   602 +	      __ret = partial;
   603 +	  }
   604 +      }
   605 +
   606 +#ifdef __UCLIBC_HAS_XLOCALE__
   607 +    __uselocale(__old);
   608 +#endif
   609 +
   610 +    return __ret; 
   611 +  }
   612 +
   613 +  int 
   614 +  codecvt<wchar_t, char, mbstate_t>::
   615 +  do_encoding() const throw()
   616 +  {
   617 +    // XXX This implementation assumes that the encoding is
   618 +    // stateless and is either single-byte or variable-width.
   619 +    int __ret = 0;
   620 +#ifdef __UCLIBC_HAS_XLOCALE__
   621 +    __c_locale __old = __uselocale(_M_c_locale_codecvt);
   622 +#endif
   623 +    if (MB_CUR_MAX == 1)
   624 +      __ret = 1;
   625 +#ifdef __UCLIBC_HAS_XLOCALE__
   626 +    __uselocale(__old);
   627 +#endif
   628 +    return __ret;
   629 +  }  
   630 +
   631 +  int 
   632 +  codecvt<wchar_t, char, mbstate_t>::
   633 +  do_max_length() const throw()
   634 +  {
   635 +#ifdef __UCLIBC_HAS_XLOCALE__
   636 +    __c_locale __old = __uselocale(_M_c_locale_codecvt);
   637 +#endif
   638 +    // XXX Probably wrong for stateful encodings.
   639 +    int __ret = MB_CUR_MAX;
   640 +#ifdef __UCLIBC_HAS_XLOCALE__
   641 +    __uselocale(__old);
   642 +#endif
   643 +    return __ret;
   644 +  }
   645 +  
   646 +  int 
   647 +  codecvt<wchar_t, char, mbstate_t>::
   648 +  do_length(state_type& __state, const extern_type* __from,
   649 +	    const extern_type* __end, size_t __max) const
   650 +  {
   651 +    int __ret = 0;
   652 +    state_type __tmp_state(__state);
   653 +
   654 +#ifdef __UCLIBC_HAS_XLOCALE__
   655 +    __c_locale __old = __uselocale(_M_c_locale_codecvt);
   656 +#endif
   657 +
   658 +    // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
   659 +    // in case we advance past it and then continue, in a loop.
   660 +    // NB: mbsnrtowcs is a GNU extension
   661 +  
   662 +    // A dummy internal buffer is needed in order for mbsnrtocws to consider
   663 +    // its fourth parameter (it wouldn't with NULL as first parameter).
   664 +    wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t) 
   665 +							   * __max));
   666 +    while (__from < __end && __max)
   667 +      {
   668 +	const extern_type* __from_chunk_end;
   669 +	__from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
   670 +								  __end
   671 +								  - __from));
   672 +	if (!__from_chunk_end)
   673 +	  __from_chunk_end = __end;
   674 +
   675 +	const extern_type* __tmp_from = __from;
   676 +	size_t __conv = mbsnrtowcs(__to, &__from,
   677 +				   __from_chunk_end - __from,
   678 +				   __max, &__state);
   679 +	if (__conv == static_cast<size_t>(-1))
   680 +	  {
   681 +	    // In case of error, in order to stop at the exact place we
   682 +	    // have to start again from the beginning with a series of
   683 +	    // mbrtowc.
   684 +	    for (__from = __tmp_from;; __from += __conv)
   685 +	      {
   686 +		__conv = mbrtowc(NULL, __from, __end - __from,
   687 +				 &__tmp_state);
   688 +		if (__conv == static_cast<size_t>(-1)
   689 +		    || __conv == static_cast<size_t>(-2))
   690 +		  break;
   691 +	      }
   692 +	    __state = __tmp_state;
   693 +	    __ret += __from - __tmp_from;
   694 +	    break;
   695 +	  }
   696 +	if (!__from)
   697 +	  __from = __from_chunk_end;
   698 +	
   699 +	__ret += __from - __tmp_from;
   700 +	__max -= __conv;
   701 +
   702 +	if (__from < __end && __max)
   703 +	  {
   704 +	    // XXX Probably wrong for stateful encodings
   705 +	    __tmp_state = __state;
   706 +	    ++__from;
   707 +	    ++__ret;
   708 +	    --__max;
   709 +	  }
   710 +      }
   711 +
   712 +#ifdef __UCLIBC_HAS_XLOCALE__
   713 +    __uselocale(__old);
   714 +#endif
   715 +
   716 +    return __ret; 
   717 +  }
   718 +#endif
   719 +}
   720 diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/collate_members.cc
   721 --- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/collate_members.cc	1969-12-31 18:00:00.000000000 -0600
   722 +++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/collate_members.cc	2005-04-28 01:13:15.000000000 -0500
   723 @@ -0,0 +1,80 @@
   724 +// std::collate implementation details, GNU version -*- C++ -*-
   725 +
   726 +// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
   727 +//
   728 +// This file is part of the GNU ISO C++ Library.  This library is free
   729 +// software; you can redistribute it and/or modify it under the
   730 +// terms of the GNU General Public License as published by the
   731 +// Free Software Foundation; either version 2, or (at your option)
   732 +// any later version.
   733 +
   734 +// This library is distributed in the hope that it will be useful,
   735 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
   736 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   737 +// GNU General Public License for more details.
   738 +
   739 +// You should have received a copy of the GNU General Public License along
   740 +// with this library; see the file COPYING.  If not, write to the Free
   741 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   742 +// USA.
   743 +
   744 +// As a special exception, you may use this file as part of a free software
   745 +// library without restriction.  Specifically, if other files instantiate
   746 +// templates or use macros or inline functions from this file, or you compile
   747 +// this file and link it with other files to produce an executable, this
   748 +// file does not by itself cause the resulting executable to be covered by
   749 +// the GNU General Public License.  This exception does not however
   750 +// invalidate any other reasons why the executable file might be covered by
   751 +// the GNU General Public License.
   752 +
   753 +//
   754 +// ISO C++ 14882: 22.2.4.1.2  collate virtual functions
   755 +//
   756 +
   757 +// Written by Benjamin Kosnik <bkoz@redhat.com>
   758 +
   759 +#include <locale>
   760 +#include <bits/c++locale_internal.h>
   761 +
   762 +#ifndef __UCLIBC_HAS_XLOCALE__
   763 +#define __strcoll_l(S1, S2, L)      strcoll((S1), (S2))
   764 +#define __strxfrm_l(S1, S2, N, L)   strxfrm((S1), (S2), (N))
   765 +#define __wcscoll_l(S1, S2, L)      wcscoll((S1), (S2))
   766 +#define __wcsxfrm_l(S1, S2, N, L)   wcsxfrm((S1), (S2), (N))
   767 +#endif
   768 +
   769 +namespace std
   770 +{
   771 +  // These are basically extensions to char_traits, and perhaps should
   772 +  // be put there instead of here.
   773 +  template<>
   774 +    int 
   775 +    collate<char>::_M_compare(const char* __one, const char* __two) const
   776 +    { 
   777 +      int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
   778 +      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
   779 +    }
   780 +  
   781 +  template<>
   782 +    size_t
   783 +    collate<char>::_M_transform(char* __to, const char* __from, 
   784 +				size_t __n) const 
   785 +    { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
   786 +
   787 +#ifdef _GLIBCXX_USE_WCHAR_T
   788 +  template<>
   789 +    int 
   790 +    collate<wchar_t>::_M_compare(const wchar_t* __one, 
   791 +				 const wchar_t* __two) const
   792 +    {
   793 +      int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
   794 +      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
   795 +    }
   796 +  
   797 +  template<>
   798 +    size_t
   799 +    collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
   800 +				   size_t __n) const
   801 +    { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
   802 +#endif
   803 +}
   804 diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
   805 --- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/ctype_members.cc	1969-12-31 18:00:00.000000000 -0600
   806 +++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc	2005-04-28 01:13:15.000000000 -0500
   807 @@ -0,0 +1,300 @@
   808 +// std::ctype implementation details, GNU version -*- C++ -*-
   809 +
   810 +// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
   811 +//
   812 +// This file is part of the GNU ISO C++ Library.  This library is free
   813 +// software; you can redistribute it and/or modify it under the
   814 +// terms of the GNU General Public License as published by the
   815 +// Free Software Foundation; either version 2, or (at your option)
   816 +// any later version.
   817 +
   818 +// This library is distributed in the hope that it will be useful,
   819 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
   820 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   821 +// GNU General Public License for more details.
   822 +
   823 +// You should have received a copy of the GNU General Public License along
   824 +// with this library; see the file COPYING.  If not, write to the Free
   825 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   826 +// USA.
   827 +
   828 +// As a special exception, you may use this file as part of a free software
   829 +// library without restriction.  Specifically, if other files instantiate
   830 +// templates or use macros or inline functions from this file, or you compile
   831 +// this file and link it with other files to produce an executable, this
   832 +// file does not by itself cause the resulting executable to be covered by
   833 +// the GNU General Public License.  This exception does not however
   834 +// invalidate any other reasons why the executable file might be covered by
   835 +// the GNU General Public License.
   836 +
   837 +//
   838 +// ISO C++ 14882: 22.2.1.1.2  ctype virtual functions.
   839 +//
   840 +
   841 +// Written by Benjamin Kosnik <bkoz@redhat.com>
   842 +
   843 +#define _LIBC
   844 +#include <locale>
   845 +#undef _LIBC
   846 +#include <bits/c++locale_internal.h>
   847 +
   848 +#ifndef __UCLIBC_HAS_XLOCALE__
   849 +#define __wctype_l(S, L)           wctype((S))
   850 +#define __towupper_l(C, L)         towupper((C))
   851 +#define __towlower_l(C, L)         towlower((C))
   852 +#define __iswctype_l(C, M, L)      iswctype((C), (M))
   853 +#endif
   854 +
   855 +namespace std
   856 +{
   857 +  // NB: The other ctype<char> specializations are in src/locale.cc and
   858 +  // various /config/os/* files.
   859 +  template<>
   860 +    ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
   861 +    : ctype<char>(0, false, __refs) 
   862 +    { 		
   863 +      if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
   864 +	{
   865 +	  this->_S_destroy_c_locale(this->_M_c_locale_ctype);
   866 +	  this->_S_create_c_locale(this->_M_c_locale_ctype, __s); 
   867 +#ifdef __UCLIBC_HAS_XLOCALE__
   868 +	  this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
   869 +	  this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
   870 +	  this->_M_table = this->_M_c_locale_ctype->__ctype_b;
   871 +#endif
   872 +	}
   873 +    }
   874 +
   875 +#ifdef _GLIBCXX_USE_WCHAR_T  
   876 +  ctype<wchar_t>::__wmask_type
   877 +  ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
   878 +  {
   879 +    __wmask_type __ret;
   880 +    switch (__m)
   881 +      {
   882 +      case space:
   883 +	__ret = __wctype_l("space", _M_c_locale_ctype);
   884 +	break;
   885 +      case print:
   886 +	__ret = __wctype_l("print", _M_c_locale_ctype);
   887 +	break;
   888 +      case cntrl:
   889 +	__ret = __wctype_l("cntrl", _M_c_locale_ctype);
   890 +	break;
   891 +      case upper:
   892 +	__ret = __wctype_l("upper", _M_c_locale_ctype);
   893 +	break;
   894 +      case lower:
   895 +	__ret = __wctype_l("lower", _M_c_locale_ctype);
   896 +	break;
   897 +      case alpha:
   898 +	__ret = __wctype_l("alpha", _M_c_locale_ctype);
   899 +	break;
   900 +      case digit:
   901 +	__ret = __wctype_l("digit", _M_c_locale_ctype);
   902 +	break;
   903 +      case punct:
   904 +	__ret = __wctype_l("punct", _M_c_locale_ctype);
   905 +	break;
   906 +      case xdigit:
   907 +	__ret = __wctype_l("xdigit", _M_c_locale_ctype);
   908 +	break;
   909 +      case alnum:
   910 +	__ret = __wctype_l("alnum", _M_c_locale_ctype);
   911 +	break;
   912 +      case graph:
   913 +	__ret = __wctype_l("graph", _M_c_locale_ctype);
   914 +	break;
   915 +      default:
   916 +	__ret = __wmask_type();
   917 +      }
   918 +    return __ret;
   919 +  }
   920 +  
   921 +  wchar_t
   922 +  ctype<wchar_t>::do_toupper(wchar_t __c) const
   923 +  { return __towupper_l(__c, _M_c_locale_ctype); }
   924 +
   925 +  const wchar_t*
   926 +  ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
   927 +  {
   928 +    while (__lo < __hi)
   929 +      {
   930 +        *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
   931 +        ++__lo;
   932 +      }
   933 +    return __hi;
   934 +  }
   935 +  
   936 +  wchar_t
   937 +  ctype<wchar_t>::do_tolower(wchar_t __c) const
   938 +  { return __towlower_l(__c, _M_c_locale_ctype); }
   939 +  
   940 +  const wchar_t*
   941 +  ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
   942 +  {
   943 +    while (__lo < __hi)
   944 +      {
   945 +        *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
   946 +        ++__lo;
   947 +      }
   948 +    return __hi;
   949 +  }
   950 +
   951 +  bool
   952 +  ctype<wchar_t>::
   953 +  do_is(mask __m, wchar_t __c) const
   954 +  { 
   955 +    // Highest bitmask in ctype_base == 10, but extra in "C"
   956 +    // library for blank.
   957 +    bool __ret = false;
   958 +    const size_t __bitmasksize = 11; 
   959 +    for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
   960 +      if (__m & _M_bit[__bitcur]
   961 +	  && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
   962 +	{
   963 +	  __ret = true;
   964 +	  break;
   965 +	}
   966 +    return __ret;    
   967 +  }
   968 +  
   969 +  const wchar_t* 
   970 +  ctype<wchar_t>::
   971 +  do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
   972 +  {
   973 +    for (; __lo < __hi; ++__vec, ++__lo)
   974 +      {
   975 +	// Highest bitmask in ctype_base == 10, but extra in "C"
   976 +	// library for blank.
   977 +	const size_t __bitmasksize = 11; 
   978 +	mask __m = 0;
   979 +	for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
   980 +	  if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
   981 +	    __m |= _M_bit[__bitcur];
   982 +	*__vec = __m;
   983 +      }
   984 +    return __hi;
   985 +  }
   986 +  
   987 +  const wchar_t* 
   988 +  ctype<wchar_t>::
   989 +  do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
   990 +  {
   991 +    while (__lo < __hi && !this->do_is(__m, *__lo))
   992 +      ++__lo;
   993 +    return __lo;
   994 +  }
   995 +
   996 +  const wchar_t*
   997 +  ctype<wchar_t>::
   998 +  do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
   999 +  {
  1000 +    while (__lo < __hi && this->do_is(__m, *__lo) != 0)
  1001 +      ++__lo;
  1002 +    return __lo;
  1003 +  }
  1004 +
  1005 +  wchar_t
  1006 +  ctype<wchar_t>::
  1007 +  do_widen(char __c) const
  1008 +  { return _M_widen[static_cast<unsigned char>(__c)]; }
  1009 +
  1010 +  const char* 
  1011 +  ctype<wchar_t>::
  1012 +  do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
  1013 +  {
  1014 +    while (__lo < __hi)
  1015 +      {
  1016 +	*__dest = _M_widen[static_cast<unsigned char>(*__lo)];
  1017 +	++__lo;
  1018 +	++__dest;
  1019 +      }
  1020 +    return __hi;
  1021 +  }
  1022 +
  1023 +  char
  1024 +  ctype<wchar_t>::
  1025 +  do_narrow(wchar_t __wc, char __dfault) const
  1026 +  {
  1027 +    if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
  1028 +      return _M_narrow[__wc];
  1029 +#ifdef __UCLIBC_HAS_XLOCALE__
  1030 +    __c_locale __old = __uselocale(_M_c_locale_ctype);
  1031 +#endif
  1032 +    const int __c = wctob(__wc);
  1033 +#ifdef __UCLIBC_HAS_XLOCALE__
  1034 +    __uselocale(__old);
  1035 +#endif
  1036 +    return (__c == EOF ? __dfault : static_cast<char>(__c)); 
  1037 +  }
  1038 +
  1039 +  const wchar_t*
  1040 +  ctype<wchar_t>::
  1041 +  do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, 
  1042 +	    char* __dest) const
  1043 +  {
  1044 +#ifdef __UCLIBC_HAS_XLOCALE__
  1045 +    __c_locale __old = __uselocale(_M_c_locale_ctype);
  1046 +#endif
  1047 +    if (_M_narrow_ok)
  1048 +      while (__lo < __hi)
  1049 +	{
  1050 +	  if (*__lo >= 0 && *__lo < 128)
  1051 +	    *__dest = _M_narrow[*__lo];
  1052 +	  else
  1053 +	    {
  1054 +	      const int __c = wctob(*__lo);
  1055 +	      *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
  1056 +	    }
  1057 +	  ++__lo;
  1058 +	  ++__dest;
  1059 +	}
  1060 +    else
  1061 +      while (__lo < __hi)
  1062 +	{
  1063 +	  const int __c = wctob(*__lo);
  1064 +	  *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
  1065 +	  ++__lo;
  1066 +	  ++__dest;
  1067 +	}
  1068 +#ifdef __UCLIBC_HAS_XLOCALE__
  1069 +    __uselocale(__old);
  1070 +#endif
  1071 +    return __hi;
  1072 +  }
  1073 +
  1074 +  void
  1075 +  ctype<wchar_t>::_M_initialize_ctype()
  1076 +  {
  1077 +#ifdef __UCLIBC_HAS_XLOCALE__
  1078 +    __c_locale __old = __uselocale(_M_c_locale_ctype);
  1079 +#endif
  1080 +    wint_t __i;
  1081 +    for (__i = 0; __i < 128; ++__i)
  1082 +      {
  1083 +	const int __c = wctob(__i);
  1084 +	if (__c == EOF)
  1085 +	  break;
  1086 +	else
  1087 +	  _M_narrow[__i] = static_cast<char>(__c);
  1088 +      }
  1089 +    if (__i == 128)
  1090 +      _M_narrow_ok = true;
  1091 +    else
  1092 +      _M_narrow_ok = false;
  1093 +    for (size_t __j = 0;
  1094 +	 __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
  1095 +      _M_widen[__j] = btowc(__j);
  1096 +
  1097 +    for (size_t __k = 0; __k <= 11; ++__k)
  1098 +      { 
  1099 +	_M_bit[__k] = static_cast<mask>(_ISbit(__k));
  1100 +	_M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
  1101 +      }
  1102 +#ifdef __UCLIBC_HAS_XLOCALE__
  1103 +    __uselocale(__old);
  1104 +#endif
  1105 +  }
  1106 +#endif //  _GLIBCXX_USE_WCHAR_T
  1107 +}
  1108 diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/messages_members.cc
  1109 --- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/messages_members.cc	1969-12-31 18:00:00.000000000 -0600
  1110 +++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/messages_members.cc	2005-04-28 01:13:15.000000000 -0500
  1111 @@ -0,0 +1,100 @@
  1112 +// std::messages implementation details, GNU version -*- C++ -*-
  1113 +
  1114 +// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
  1115 +//
  1116 +// This file is part of the GNU ISO C++ Library.  This library is free
  1117 +// software; you can redistribute it and/or modify it under the
  1118 +// terms of the GNU General Public License as published by the
  1119 +// Free Software Foundation; either version 2, or (at your option)
  1120 +// any later version.
  1121 +
  1122 +// This library is distributed in the hope that it will be useful,
  1123 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  1124 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1125 +// GNU General Public License for more details.
  1126 +
  1127 +// You should have received a copy of the GNU General Public License along
  1128 +// with this library; see the file COPYING.  If not, write to the Free
  1129 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  1130 +// USA.
  1131 +
  1132 +// As a special exception, you may use this file as part of a free software
  1133 +// library without restriction.  Specifically, if other files instantiate
  1134 +// templates or use macros or inline functions from this file, or you compile
  1135 +// this file and link it with other files to produce an executable, this
  1136 +// file does not by itself cause the resulting executable to be covered by
  1137 +// the GNU General Public License.  This exception does not however
  1138 +// invalidate any other reasons why the executable file might be covered by
  1139 +// the GNU General Public License.
  1140 +
  1141 +//
  1142 +// ISO C++ 14882: 22.2.7.1.2  messages virtual functions
  1143 +//
  1144 +
  1145 +// Written by Benjamin Kosnik <bkoz@redhat.com>
  1146 +
  1147 +#include <locale>
  1148 +#include <bits/c++locale_internal.h>
  1149 +
  1150 +#ifdef __UCLIBC_MJN3_ONLY__
  1151 +#warning fix gettext stuff
  1152 +#endif
  1153 +#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
  1154 +extern "C" char *__dcgettext(const char *domainname,
  1155 +			     const char *msgid, int category);
  1156 +#undef gettext
  1157 +#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
  1158 +#else
  1159 +#undef gettext
  1160 +#define gettext(msgid) (msgid)
  1161 +#endif
  1162 +
  1163 +namespace std
  1164 +{
  1165 +  // Specializations.
  1166 +  template<>
  1167 +    string
  1168 +    messages<char>::do_get(catalog, int, int, const string& __dfault) const
  1169 +    {
  1170 +#ifdef __UCLIBC_HAS_XLOCALE__
  1171 +      __c_locale __old = __uselocale(_M_c_locale_messages);
  1172 +      const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
  1173 +      __uselocale(__old);
  1174 +      return string(__msg);
  1175 +#elif defined __UCLIBC_HAS_LOCALE__
  1176 +      char* __old = strdup(setlocale(LC_ALL, NULL));
  1177 +      setlocale(LC_ALL, _M_name_messages);
  1178 +      const char* __msg = gettext(__dfault.c_str());
  1179 +      setlocale(LC_ALL, __old);
  1180 +      free(__old);
  1181 +      return string(__msg);
  1182 +#else
  1183 +      const char* __msg = gettext(__dfault.c_str());
  1184 +      return string(__msg);
  1185 +#endif
  1186 +    }
  1187 +
  1188 +#ifdef _GLIBCXX_USE_WCHAR_T
  1189 +  template<>
  1190 +    wstring
  1191 +    messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
  1192 +    {
  1193 +# ifdef __UCLIBC_HAS_XLOCALE__
  1194 +      __c_locale __old = __uselocale(_M_c_locale_messages);
  1195 +      char* __msg = gettext(_M_convert_to_char(__dfault));
  1196 +      __uselocale(__old);
  1197 +      return _M_convert_from_char(__msg);
  1198 +# elif defined __UCLIBC_HAS_LOCALE__
  1199 +      char* __old = strdup(setlocale(LC_ALL, NULL));
  1200 +      setlocale(LC_ALL, _M_name_messages);
  1201 +      char* __msg = gettext(_M_convert_to_char(__dfault));
  1202 +      setlocale(LC_ALL, __old);
  1203 +      free(__old);
  1204 +      return _M_convert_from_char(__msg);
  1205 +# else
  1206 +      char* __msg = gettext(_M_convert_to_char(__dfault));
  1207 +      return _M_convert_from_char(__msg);
  1208 +# endif
  1209 +    }
  1210 +#endif
  1211 +}
  1212 diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-4.0.0/libstdc++-v3/config/locale/uclibc/messages_members.h
  1213 --- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/messages_members.h	1969-12-31 18:00:00.000000000 -0600
  1214 +++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/messages_members.h	2005-04-28 01:13:15.000000000 -0500
  1215 @@ -0,0 +1,118 @@
  1216 +// std::messages implementation details, GNU version -*- C++ -*-
  1217 +
  1218 +// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  1219 +//
  1220 +// This file is part of the GNU ISO C++ Library.  This library is free
  1221 +// software; you can redistribute it and/or modify it under the
  1222 +// terms of the GNU General Public License as published by the
  1223 +// Free Software Foundation; either version 2, or (at your option)
  1224 +// any later version.
  1225 +
  1226 +// This library is distributed in the hope that it will be useful,
  1227 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  1228 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1229 +// GNU General Public License for more details.
  1230 +
  1231 +// You should have received a copy of the GNU General Public License along
  1232 +// with this library; see the file COPYING.  If not, write to the Free
  1233 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  1234 +// USA.
  1235 +
  1236 +// As a special exception, you may use this file as part of a free software
  1237 +// library without restriction.  Specifically, if other files instantiate
  1238 +// templates or use macros or inline functions from this file, or you compile
  1239 +// this file and link it with other files to produce an executable, this
  1240 +// file does not by itself cause the resulting executable to be covered by
  1241 +// the GNU General Public License.  This exception does not however
  1242 +// invalidate any other reasons why the executable file might be covered by
  1243 +// the GNU General Public License.
  1244 +
  1245 +//
  1246 +// ISO C++ 14882: 22.2.7.1.2  messages functions
  1247 +//
  1248 +
  1249 +// Written by Benjamin Kosnik <bkoz@redhat.com>
  1250 +
  1251 +#ifdef __UCLIBC_MJN3_ONLY__
  1252 +#warning fix prototypes for *textdomain funcs
  1253 +#endif
  1254 +#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
  1255 +extern "C" char *__textdomain(const char *domainname);
  1256 +extern "C" char *__bindtextdomain(const char *domainname,
  1257 +				  const char *dirname);
  1258 +#else
  1259 +#undef __textdomain
  1260 +#undef __bindtextdomain
  1261 +#define __textdomain(D)           ((void)0)
  1262 +#define __bindtextdomain(D,P)     ((void)0)
  1263 +#endif
  1264 +
  1265 +  // Non-virtual member functions.
  1266 +  template<typename _CharT>
  1267 +     messages<_CharT>::messages(size_t __refs)
  1268 +     : facet(__refs), _M_c_locale_messages(_S_get_c_locale()), 
  1269 +     _M_name_messages(_S_get_c_name())
  1270 +     { }
  1271 +
  1272 +  template<typename _CharT>
  1273 +     messages<_CharT>::messages(__c_locale __cloc, const char* __s, 
  1274 +				size_t __refs) 
  1275 +     : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
  1276 +     _M_name_messages(__s)
  1277 +     {
  1278 +       char* __tmp = new char[std::strlen(__s) + 1];
  1279 +       std::strcpy(__tmp, __s);
  1280 +       _M_name_messages = __tmp;
  1281 +     }
  1282 +
  1283 +  template<typename _CharT>
  1284 +    typename messages<_CharT>::catalog 
  1285 +    messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, 
  1286 +			   const char* __dir) const
  1287 +    { 
  1288 +      __bindtextdomain(__s.c_str(), __dir);
  1289 +      return this->do_open(__s, __loc); 
  1290 +    }
  1291 +
  1292 +  // Virtual member functions.
  1293 +  template<typename _CharT>
  1294 +    messages<_CharT>::~messages()
  1295 +    { 
  1296 +      if (_M_name_messages != _S_get_c_name())
  1297 +	delete [] _M_name_messages;
  1298 +      _S_destroy_c_locale(_M_c_locale_messages); 
  1299 +    }
  1300 +
  1301 +  template<typename _CharT>
  1302 +    typename messages<_CharT>::catalog 
  1303 +    messages<_CharT>::do_open(const basic_string<char>& __s, 
  1304 +			      const locale&) const
  1305 +    { 
  1306 +      // No error checking is done, assume the catalog exists and can
  1307 +      // be used.
  1308 +      __textdomain(__s.c_str());
  1309 +      return 0;
  1310 +    }
  1311 +
  1312 +  template<typename _CharT>
  1313 +    void    
  1314 +    messages<_CharT>::do_close(catalog) const 
  1315 +    { }
  1316 +
  1317 +   // messages_byname
  1318 +   template<typename _CharT>
  1319 +     messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
  1320 +     : messages<_CharT>(__refs) 
  1321 +     { 
  1322 +       if (this->_M_name_messages != locale::facet::_S_get_c_name())
  1323 +	 delete [] this->_M_name_messages;
  1324 +       char* __tmp = new char[std::strlen(__s) + 1];
  1325 +       std::strcpy(__tmp, __s);
  1326 +       this->_M_name_messages = __tmp;
  1327 +
  1328 +       if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
  1329 +	 {
  1330 +	   this->_S_destroy_c_locale(this->_M_c_locale_messages);
  1331 +	   this->_S_create_c_locale(this->_M_c_locale_messages, __s); 
  1332 +	 }
  1333 +     }
  1334 diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
  1335 --- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/monetary_members.cc	1969-12-31 18:00:00.000000000 -0600
  1336 +++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc	2005-04-28 01:23:02.000000000 -0500
  1337 @@ -0,0 +1,692 @@
  1338 +// std::moneypunct implementation details, GNU version -*- C++ -*-
  1339 +
  1340 +// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  1341 +//
  1342 +// This file is part of the GNU ISO C++ Library.  This library is free
  1343 +// software; you can redistribute it and/or modify it under the
  1344 +// terms of the GNU General Public License as published by the
  1345 +// Free Software Foundation; either version 2, or (at your option)
  1346 +// any later version.
  1347 +
  1348 +// This library is distributed in the hope that it will be useful,
  1349 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  1350 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1351 +// GNU General Public License for more details.
  1352 +
  1353 +// You should have received a copy of the GNU General Public License along
  1354 +// with this library; see the file COPYING.  If not, write to the Free
  1355 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  1356 +// USA.
  1357 +
  1358 +// As a special exception, you may use this file as part of a free software
  1359 +// library without restriction.  Specifically, if other files instantiate
  1360 +// templates or use macros or inline functions from this file, or you compile
  1361 +// this file and link it with other files to produce an executable, this
  1362 +// file does not by itself cause the resulting executable to be covered by
  1363 +// the GNU General Public License.  This exception does not however
  1364 +// invalidate any other reasons why the executable file might be covered by
  1365 +// the GNU General Public License.
  1366 +
  1367 +//
  1368 +// ISO C++ 14882: 22.2.6.3.2  moneypunct virtual functions
  1369 +//
  1370 +
  1371 +// Written by Benjamin Kosnik <bkoz@redhat.com>
  1372 +
  1373 +#define _LIBC
  1374 +#include <locale>
  1375 +#undef _LIBC
  1376 +#include <bits/c++locale_internal.h>
  1377 +
  1378 +#ifdef __UCLIBC_MJN3_ONLY__
  1379 +#warning optimize this for uclibc
  1380 +#warning tailor for stub locale support
  1381 +#endif
  1382 +
  1383 +#ifndef __UCLIBC_HAS_XLOCALE__
  1384 +#define __nl_langinfo_l(N, L)         nl_langinfo((N))
  1385 +#endif
  1386 +
  1387 +namespace std
  1388 +{
  1389 +  // Construct and return valid pattern consisting of some combination of:
  1390 +  // space none symbol sign value
  1391 +  money_base::pattern
  1392 +  money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
  1393 +  { 
  1394 +    pattern __ret;
  1395 +
  1396 +    // This insanely complicated routine attempts to construct a valid
  1397 +    // pattern for use with monyepunct. A couple of invariants:
  1398 +
  1399 +    // if (__precedes) symbol -> value
  1400 +    // else value -> symbol
  1401 +    
  1402 +    // if (__space) space
  1403 +    // else none
  1404 +
  1405 +    // none == never first
  1406 +    // space never first or last
  1407 +
  1408 +    // Any elegant implementations of this are welcome.
  1409 +    switch (__posn)
  1410 +      {
  1411 +      case 0:
  1412 +      case 1:
  1413 +	// 1 The sign precedes the value and symbol.
  1414 +	__ret.field[0] = sign;
  1415 +	if (__space)
  1416 +	  {
  1417 +	    // Pattern starts with sign.
  1418 +	    if (__precedes)
  1419 +	      {
  1420 +		__ret.field[1] = symbol;
  1421 +		__ret.field[3] = value;
  1422 +	      }
  1423 +	    else
  1424 +	      {
  1425 +		__ret.field[1] = value;
  1426 +		__ret.field[3] = symbol;
  1427 +	      }
  1428 +	    __ret.field[2] = space;
  1429 +	  }
  1430 +	else
  1431 +	  {
  1432 +	    // Pattern starts with sign and ends with none.
  1433 +	    if (__precedes)
  1434 +	      {
  1435 +		__ret.field[1] = symbol;
  1436 +		__ret.field[2] = value;
  1437 +	      }
  1438 +	    else
  1439 +	      {
  1440 +		__ret.field[1] = value;
  1441 +		__ret.field[2] = symbol;
  1442 +	      }
  1443 +	    __ret.field[3] = none;
  1444 +	  }
  1445 +	break;
  1446 +      case 2:
  1447 +	// 2 The sign follows the value and symbol.
  1448 +	if (__space)
  1449 +	  {
  1450 +	    // Pattern either ends with sign.
  1451 +	    if (__precedes)
  1452 +	      {
  1453 +		__ret.field[0] = symbol;
  1454 +		__ret.field[2] = value;
  1455 +	      }
  1456 +	    else
  1457 +	      {
  1458 +		__ret.field[0] = value;
  1459 +		__ret.field[2] = symbol;
  1460 +	      }
  1461 +	    __ret.field[1] = space;
  1462 +	    __ret.field[3] = sign;
  1463 +	  }
  1464 +	else
  1465 +	  {
  1466 +	    // Pattern ends with sign then none.
  1467 +	    if (__precedes)
  1468 +	      {
  1469 +		__ret.field[0] = symbol;
  1470 +		__ret.field[1] = value;
  1471 +	      }
  1472 +	    else
  1473 +	      {
  1474 +		__ret.field[0] = value;
  1475 +		__ret.field[1] = symbol;
  1476 +	      }
  1477 +	    __ret.field[2] = sign;
  1478 +	    __ret.field[3] = none;
  1479 +	  }
  1480 +	break;
  1481 +      case 3:
  1482 +	// 3 The sign immediately precedes the symbol.
  1483 +	if (__precedes)
  1484 +	  {
  1485 +	    __ret.field[0] = sign;
  1486 +	    __ret.field[1] = symbol;	    
  1487 +	    if (__space)
  1488 +	      {
  1489 +		__ret.field[2] = space;
  1490 +		__ret.field[3] = value;
  1491 +	      }
  1492 +	    else
  1493 +	      {
  1494 +		__ret.field[2] = value;		
  1495 +		__ret.field[3] = none;
  1496 +	      }
  1497 +	  }
  1498 +	else
  1499 +	  {
  1500 +	    __ret.field[0] = value;
  1501 +	    if (__space)
  1502 +	      {
  1503 +		__ret.field[1] = space;
  1504 +		__ret.field[2] = sign;
  1505 +		__ret.field[3] = symbol;
  1506 +	      }
  1507 +	    else
  1508 +	      {
  1509 +		__ret.field[1] = sign;
  1510 +		__ret.field[2] = symbol;
  1511 +		__ret.field[3] = none;
  1512 +	      }
  1513 +	  }
  1514 +	break;
  1515 +      case 4:
  1516 +	// 4 The sign immediately follows the symbol.
  1517 +	if (__precedes)
  1518 +	  {
  1519 +	    __ret.field[0] = symbol;
  1520 +	    __ret.field[1] = sign;
  1521 +	    if (__space)
  1522 +	      {
  1523 +		__ret.field[2] = space;
  1524 +		__ret.field[3] = value;
  1525 +	      }
  1526 +	    else
  1527 +	      {
  1528 +		__ret.field[2] = value;
  1529 +		__ret.field[3] = none;
  1530 +	      }
  1531 +	  }
  1532 +	else
  1533 +	  {
  1534 +	    __ret.field[0] = value;
  1535 +	    if (__space)
  1536 +	      {
  1537 +		__ret.field[1] = space;
  1538 +		__ret.field[2] = symbol;
  1539 +		__ret.field[3] = sign;
  1540 +	      }
  1541 +	    else
  1542 +	      {
  1543 +		__ret.field[1] = symbol;
  1544 +		__ret.field[2] = sign;
  1545 +		__ret.field[3] = none;
  1546 +	      }
  1547 +	  }
  1548 +	break;
  1549 +      default:
  1550 +	__ret = pattern();
  1551 +      }
  1552 +    return __ret;
  1553 +  }
  1554 +
  1555 +  template<> 
  1556 +    void
  1557 +    moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc, 
  1558 +						     const char*)
  1559 +    {
  1560 +      if (!_M_data)
  1561 +	_M_data = new __moneypunct_cache<char, true>;
  1562 +
  1563 +      if (!__cloc)
  1564 +	{
  1565 +	  // "C" locale
  1566 +	  _M_data->_M_decimal_point = '.';
  1567 +	  _M_data->_M_thousands_sep = ',';
  1568 +	  _M_data->_M_grouping = "";
  1569 +	  _M_data->_M_grouping_size = 0;
  1570 +	  _M_data->_M_curr_symbol = "";
  1571 +	  _M_data->_M_curr_symbol_size = 0;
  1572 +	  _M_data->_M_positive_sign = "";
  1573 +	  _M_data->_M_positive_sign_size = 0;
  1574 +	  _M_data->_M_negative_sign = "";
  1575 +	  _M_data->_M_negative_sign_size = 0;
  1576 +	  _M_data->_M_frac_digits = 0;
  1577 +	  _M_data->_M_pos_format = money_base::_S_default_pattern;
  1578 +	  _M_data->_M_neg_format = money_base::_S_default_pattern;
  1579 +
  1580 +	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
  1581 +	    _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
  1582 +	}
  1583 +      else
  1584 +	{
  1585 +	  // Named locale.
  1586 +	  _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, 
  1587 +							__cloc));
  1588 +	  _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, 
  1589 +							__cloc));
  1590 +	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
  1591 +	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
  1592 +	  _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
  1593 +	  _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
  1594 +
  1595 +	  char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
  1596 +	  if (!__nposn)
  1597 +	    _M_data->_M_negative_sign = "()";
  1598 +	  else
  1599 +	    _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, 
  1600 +							__cloc);
  1601 +	  _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
  1602 +
  1603 +	  // _Intl == true
  1604 +	  _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
  1605 +	  _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
  1606 +	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, 
  1607 +						      __cloc));
  1608 +	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
  1609 +	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
  1610 +	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
  1611 +	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
  1612 +							__pposn);
  1613 +	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
  1614 +	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
  1615 +	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
  1616 +							__nposn);
  1617 +	}
  1618 +    }
  1619 +
  1620 +  template<> 
  1621 +    void
  1622 +    moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc, 
  1623 +						      const char*)
  1624 +    {
  1625 +      if (!_M_data)
  1626 +	_M_data = new __moneypunct_cache<char, false>;
  1627 +
  1628 +      if (!__cloc)
  1629 +	{
  1630 +	  // "C" locale
  1631 +	  _M_data->_M_decimal_point = '.';
  1632 +	  _M_data->_M_thousands_sep = ',';
  1633 +	  _M_data->_M_grouping = "";
  1634 +	  _M_data->_M_grouping_size = 0;
  1635 +	  _M_data->_M_curr_symbol = "";
  1636 +	  _M_data->_M_curr_symbol_size = 0;
  1637 +	  _M_data->_M_positive_sign = "";
  1638 +	  _M_data->_M_positive_sign_size = 0;
  1639 +	  _M_data->_M_negative_sign = "";
  1640 +	  _M_data->_M_negative_sign_size = 0;
  1641 +	  _M_data->_M_frac_digits = 0;
  1642 +	  _M_data->_M_pos_format = money_base::_S_default_pattern;
  1643 +	  _M_data->_M_neg_format = money_base::_S_default_pattern;
  1644 +
  1645 +	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
  1646 +	    _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
  1647 +	}
  1648 +      else
  1649 +	{
  1650 +	  // Named locale.
  1651 +	  _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, 
  1652 +							__cloc));
  1653 +	  _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, 
  1654 +							__cloc));
  1655 +	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
  1656 +	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
  1657 +	  _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
  1658 +	  _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
  1659 +
  1660 +	  char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
  1661 +	  if (!__nposn)
  1662 +	    _M_data->_M_negative_sign = "()";
  1663 +	  else
  1664 +	    _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
  1665 +							__cloc);
  1666 +	  _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
  1667 +
  1668 +	  // _Intl == false
  1669 +	  _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
  1670 +	  _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
  1671 +	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
  1672 +	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
  1673 +	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
  1674 +	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
  1675 +	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
  1676 +							__pposn);
  1677 +	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
  1678 +	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
  1679 +	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
  1680 +							__nposn);
  1681 +	}
  1682 +    }
  1683 +
  1684 +  template<> 
  1685 +    moneypunct<char, true>::~moneypunct()
  1686 +    { delete _M_data; }
  1687 +
  1688 +  template<> 
  1689 +    moneypunct<char, false>::~moneypunct()
  1690 +    { delete _M_data; }
  1691 +
  1692 +#ifdef _GLIBCXX_USE_WCHAR_T
  1693 +  template<> 
  1694 +    void
  1695 +    moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc, 
  1696 +#ifdef __UCLIBC_HAS_XLOCALE__
  1697 +							const char*)
  1698 +#else
  1699 +							const char* __name)
  1700 +#endif
  1701 +    {
  1702 +      if (!_M_data)
  1703 +	_M_data = new __moneypunct_cache<wchar_t, true>;
  1704 +
  1705 +      if (!__cloc)
  1706 +	{
  1707 +	  // "C" locale
  1708 +	  _M_data->_M_decimal_point = L'.';
  1709 +	  _M_data->_M_thousands_sep = L',';
  1710 +	  _M_data->_M_grouping = "";
  1711 +	  _M_data->_M_grouping_size = 0;
  1712 +	  _M_data->_M_curr_symbol = L"";
  1713 +	  _M_data->_M_curr_symbol_size = 0;
  1714 +	  _M_data->_M_positive_sign = L"";
  1715 +	  _M_data->_M_positive_sign_size = 0;
  1716 +	  _M_data->_M_negative_sign = L"";
  1717 +	  _M_data->_M_negative_sign_size = 0;
  1718 +	  _M_data->_M_frac_digits = 0;
  1719 +	  _M_data->_M_pos_format = money_base::_S_default_pattern;
  1720 +	  _M_data->_M_neg_format = money_base::_S_default_pattern;
  1721 +
  1722 +	  // Use ctype::widen code without the facet...
  1723 +	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
  1724 +	    _M_data->_M_atoms[__i] =
  1725 +	      static_cast<wchar_t>(money_base::_S_atoms[__i]);
  1726 +	}
  1727 +      else
  1728 +	{
  1729 +	  // Named locale.
  1730 +#ifdef __UCLIBC_HAS_XLOCALE__
  1731 +	  __c_locale __old = __uselocale(__cloc);
  1732 +#else
  1733 +	  // Switch to named locale so that mbsrtowcs will work.
  1734 +	  char* __old = strdup(setlocale(LC_ALL, NULL));
  1735 +	  setlocale(LC_ALL, __name);
  1736 +#endif
  1737 +
  1738 +#ifdef __UCLIBC_MJN3_ONLY__
  1739 +#warning fix this... should be monetary
  1740 +#endif
  1741 +#ifdef __UCLIBC__
  1742 +# ifdef __UCLIBC_HAS_XLOCALE__
  1743 +	  _M_data->_M_decimal_point = __cloc->decimal_point_wc;
  1744 +	  _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
  1745 +# else
  1746 +	  _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
  1747 +	  _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
  1748 +# endif
  1749 +#else
  1750 +	  union { char *__s; wchar_t __w; } __u;
  1751 +	  __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
  1752 +	  _M_data->_M_decimal_point = __u.__w;
  1753 +
  1754 +	  __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
  1755 +	  _M_data->_M_thousands_sep = __u.__w;
  1756 +#endif
  1757 +	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
  1758 +	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
  1759 +
  1760 +	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
  1761 +	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
  1762 +	  const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
  1763 +
  1764 +	  wchar_t* __wcs_ps = 0;
  1765 +	  wchar_t* __wcs_ns = 0;
  1766 +	  const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
  1767 +	  try
  1768 +	    {
  1769 +	      mbstate_t __state;
  1770 +	      size_t __len = strlen(__cpossign);
  1771 +	      if (__len)
  1772 +		{
  1773 +		  ++__len;
  1774 +		  memset(&__state, 0, sizeof(mbstate_t));
  1775 +		  __wcs_ps = new wchar_t[__len];
  1776 +		  mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
  1777 +		  _M_data->_M_positive_sign = __wcs_ps;
  1778 +		}
  1779 +	      else
  1780 +		_M_data->_M_positive_sign = L"";
  1781 +	      _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
  1782 +	      
  1783 +	      __len = strlen(__cnegsign);
  1784 +	      if (!__nposn)
  1785 +		_M_data->_M_negative_sign = L"()";
  1786 +	      else if (__len)
  1787 +		{ 
  1788 +		  ++__len;
  1789 +		  memset(&__state, 0, sizeof(mbstate_t));
  1790 +		  __wcs_ns = new wchar_t[__len];
  1791 +		  mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
  1792 +		  _M_data->_M_negative_sign = __wcs_ns;
  1793 +		}
  1794 +	      else
  1795 +		_M_data->_M_negative_sign = L"";
  1796 +	      _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
  1797 +	      
  1798 +	      // _Intl == true.
  1799 +	      __len = strlen(__ccurr);
  1800 +	      if (__len)
  1801 +		{
  1802 +		  ++__len;
  1803 +		  memset(&__state, 0, sizeof(mbstate_t));
  1804 +		  wchar_t* __wcs = new wchar_t[__len];
  1805 +		  mbsrtowcs(__wcs, &__ccurr, __len, &__state);
  1806 +		  _M_data->_M_curr_symbol = __wcs;
  1807 +		}
  1808 +	      else
  1809 +		_M_data->_M_curr_symbol = L"";
  1810 +	      _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
  1811 +	    }
  1812 +	  catch (...)
  1813 +	    {
  1814 +	      delete _M_data;
  1815 +	      _M_data = 0;
  1816 +	      delete __wcs_ps;
  1817 +	      delete __wcs_ns;	      
  1818 +#ifdef __UCLIBC_HAS_XLOCALE__
  1819 +	      __uselocale(__old);
  1820 +#else
  1821 +	      setlocale(LC_ALL, __old);
  1822 +	      free(__old);
  1823 +#endif
  1824 +	      __throw_exception_again;
  1825 +	    } 
  1826 +	  
  1827 +	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, 
  1828 +						      __cloc));
  1829 +	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
  1830 +	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
  1831 +	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
  1832 +	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
  1833 +							__pposn);
  1834 +	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
  1835 +	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
  1836 +	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
  1837 +							__nposn);
  1838 +
  1839 +#ifdef __UCLIBC_HAS_XLOCALE__
  1840 +	  __uselocale(__old);
  1841 +#else
  1842 +	  setlocale(LC_ALL, __old);
  1843 +	  free(__old);
  1844 +#endif
  1845 +	}
  1846 +    }
  1847 +
  1848 +  template<> 
  1849 +  void
  1850 +  moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
  1851 +#ifdef __UCLIBC_HAS_XLOCALE__
  1852 +						       const char*)
  1853 +#else
  1854 +                                                       const char* __name)
  1855 +#endif
  1856 +  {
  1857 +    if (!_M_data)
  1858 +      _M_data = new __moneypunct_cache<wchar_t, false>;
  1859 +
  1860 +    if (!__cloc)
  1861 +	{
  1862 +	  // "C" locale
  1863 +	  _M_data->_M_decimal_point = L'.';
  1864 +	  _M_data->_M_thousands_sep = L',';
  1865 +	  _M_data->_M_grouping = "";
  1866 +          _M_data->_M_grouping_size = 0;
  1867 +	  _M_data->_M_curr_symbol = L"";
  1868 +	  _M_data->_M_curr_symbol_size = 0;
  1869 +	  _M_data->_M_positive_sign = L"";
  1870 +	  _M_data->_M_positive_sign_size = 0;
  1871 +	  _M_data->_M_negative_sign = L"";
  1872 +	  _M_data->_M_negative_sign_size = 0;
  1873 +	  _M_data->_M_frac_digits = 0;
  1874 +	  _M_data->_M_pos_format = money_base::_S_default_pattern;
  1875 +	  _M_data->_M_neg_format = money_base::_S_default_pattern;
  1876 +
  1877 +	  // Use ctype::widen code without the facet...
  1878 +	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
  1879 +	    _M_data->_M_atoms[__i] =
  1880 +	      static_cast<wchar_t>(money_base::_S_atoms[__i]);
  1881 +	}
  1882 +      else
  1883 +	{
  1884 +	  // Named locale.
  1885 +#ifdef __UCLIBC_HAS_XLOCALE__
  1886 +	  __c_locale __old = __uselocale(__cloc);
  1887 +#else
  1888 +	  // Switch to named locale so that mbsrtowcs will work.
  1889 +	  char* __old = strdup(setlocale(LC_ALL, NULL));
  1890 +	  setlocale(LC_ALL, __name);
  1891 +#endif
  1892 +
  1893 +#ifdef __UCLIBC_MJN3_ONLY__
  1894 +#warning fix this... should be monetary
  1895 +#endif
  1896 +#ifdef __UCLIBC__
  1897 +# ifdef __UCLIBC_HAS_XLOCALE__
  1898 +	  _M_data->_M_decimal_point = __cloc->decimal_point_wc;
  1899 +	  _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
  1900 +# else
  1901 +	  _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
  1902 +	  _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
  1903 +# endif
  1904 +#else
  1905 +          union { char *__s; wchar_t __w; } __u;
  1906 +	  __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
  1907 +	  _M_data->_M_decimal_point = __u.__w;
  1908 +
  1909 +	  __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
  1910 +	  _M_data->_M_thousands_sep = __u.__w;
  1911 +#endif
  1912 +	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
  1913 +          _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
  1914 +
  1915 +	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
  1916 +	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
  1917 +	  const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
  1918 +
  1919 +	  wchar_t* __wcs_ps = 0;
  1920 +	  wchar_t* __wcs_ns = 0;
  1921 +	  const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
  1922 +	  try
  1923 +            {
  1924 +              mbstate_t __state;
  1925 +              size_t __len;
  1926 +              __len = strlen(__cpossign);
  1927 +              if (__len)
  1928 +                {
  1929 +		  ++__len;
  1930 +		  memset(&__state, 0, sizeof(mbstate_t));
  1931 +		  __wcs_ps = new wchar_t[__len];
  1932 +		  mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
  1933 +		  _M_data->_M_positive_sign = __wcs_ps;
  1934 +		}
  1935 +	      else
  1936 +		_M_data->_M_positive_sign = L"";
  1937 +              _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
  1938 +	      
  1939 +	      __len = strlen(__cnegsign);
  1940 +	      if (!__nposn)
  1941 +		_M_data->_M_negative_sign = L"()";
  1942 +	      else if (__len)
  1943 +		{ 
  1944 +		  ++__len;
  1945 +		  memset(&__state, 0, sizeof(mbstate_t));
  1946 +		  __wcs_ns = new wchar_t[__len];
  1947 +		  mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
  1948 +		  _M_data->_M_negative_sign = __wcs_ns;
  1949 +		}
  1950 +	      else
  1951 +		_M_data->_M_negative_sign = L"";
  1952 +              _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
  1953 +
  1954 +	      // _Intl == true.
  1955 +	      __len = strlen(__ccurr);
  1956 +	      if (__len)
  1957 +		{
  1958 +		  ++__len;
  1959 +		  memset(&__state, 0, sizeof(mbstate_t));
  1960 +		  wchar_t* __wcs = new wchar_t[__len];
  1961 +		  mbsrtowcs(__wcs, &__ccurr, __len, &__state);
  1962 +		  _M_data->_M_curr_symbol = __wcs;
  1963 +		}
  1964 +	      else
  1965 +		_M_data->_M_curr_symbol = L"";
  1966 +              _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
  1967 +	    }
  1968 +          catch (...)
  1969 +	    {
  1970 +	      delete _M_data;
  1971 +              _M_data = 0;
  1972 +	      delete __wcs_ps;
  1973 +	      delete __wcs_ns;	      
  1974 +#ifdef __UCLIBC_HAS_XLOCALE__
  1975 +	      __uselocale(__old);
  1976 +#else
  1977 +	      setlocale(LC_ALL, __old);
  1978 +	      free(__old);
  1979 +#endif
  1980 +              __throw_exception_again;
  1981 +	    }
  1982 +
  1983 +	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
  1984 +	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
  1985 +	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
  1986 +	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
  1987 +	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
  1988 +	                                                __pposn);
  1989 +	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
  1990 +	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
  1991 +	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
  1992 +	                                                __nposn);
  1993 +
  1994 +#ifdef __UCLIBC_HAS_XLOCALE__
  1995 +	  __uselocale(__old);
  1996 +#else
  1997 +	  setlocale(LC_ALL, __old);
  1998 +	  free(__old);
  1999 +#endif
  2000 +	}
  2001 +    }
  2002 +
  2003 +  template<> 
  2004 +    moneypunct<wchar_t, true>::~moneypunct()
  2005 +    {
  2006 +      if (_M_data->_M_positive_sign_size)
  2007 +	delete [] _M_data->_M_positive_sign;
  2008 +      if (_M_data->_M_negative_sign_size
  2009 +          && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
  2010 +	delete [] _M_data->_M_negative_sign;
  2011 +      if (_M_data->_M_curr_symbol_size)
  2012 +	delete [] _M_data->_M_curr_symbol;
  2013 +      delete _M_data;
  2014 +    }
  2015 +
  2016 +  template<> 
  2017 +    moneypunct<wchar_t, false>::~moneypunct()
  2018 +    {
  2019 +      if (_M_data->_M_positive_sign_size)
  2020 +	delete [] _M_data->_M_positive_sign;
  2021 +      if (_M_data->_M_negative_sign_size
  2022 +          && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
  2023 +	delete [] _M_data->_M_negative_sign;
  2024 +      if (_M_data->_M_curr_symbol_size)
  2025 +	delete [] _M_data->_M_curr_symbol;
  2026 +      delete _M_data;
  2027 +    }
  2028 +#endif
  2029 +}
  2030 diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
  2031 --- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/numeric_members.cc	1969-12-31 18:00:00.000000000 -0600
  2032 +++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc	2005-04-28 01:20:20.000000000 -0500
  2033 @@ -0,0 +1,173 @@
  2034 +// std::numpunct implementation details, GNU version -*- C++ -*-
  2035 +
  2036 +// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  2037 +//
  2038 +// This file is part of the GNU ISO C++ Library.  This library is free
  2039 +// software; you can redistribute it and/or modify it under the
  2040 +// terms of the GNU General Public License as published by the
  2041 +// Free Software Foundation; either version 2, or (at your option)
  2042 +// any later version.
  2043 +
  2044 +// This library is distributed in the hope that it will be useful,
  2045 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  2046 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2047 +// GNU General Public License for more details.
  2048 +
  2049 +// You should have received a copy of the GNU General Public License along
  2050 +// with this library; see the file COPYING.  If not, write to the Free
  2051 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  2052 +// USA.
  2053 +
  2054 +// As a special exception, you may use this file as part of a free software
  2055 +// library without restriction.  Specifically, if other files instantiate
  2056 +// templates or use macros or inline functions from this file, or you compile
  2057 +// this file and link it with other files to produce an executable, this
  2058 +// file does not by itself cause the resulting executable to be covered by
  2059 +// the GNU General Public License.  This exception does not however
  2060 +// invalidate any other reasons why the executable file might be covered by
  2061 +// the GNU General Public License.
  2062 +
  2063 +//
  2064 +// ISO C++ 14882: 22.2.3.1.2  numpunct virtual functions
  2065 +//
  2066 +
  2067 +// Written by Benjamin Kosnik <bkoz@redhat.com>
  2068 +
  2069 +#define _LIBC
  2070 +#include <locale>
  2071 +#undef _LIBC
  2072 +#include <bits/c++locale_internal.h>
  2073 +
  2074 +#ifdef __UCLIBC_MJN3_ONLY__
  2075 +#warning tailor for stub locale support
  2076 +#endif
  2077 +#ifndef __UCLIBC_HAS_XLOCALE__
  2078 +#define __nl_langinfo_l(N, L)         nl_langinfo((N))
  2079 +#endif
  2080 +
  2081 +namespace std
  2082 +{
  2083 +  template<> 
  2084 +    void
  2085 +    numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
  2086 +    {
  2087 +      if (!_M_data)
  2088 +	_M_data = new __numpunct_cache<char>;
  2089 +
  2090 +      if (!__cloc)
  2091 +	{
  2092 +	  // "C" locale
  2093 +	  _M_data->_M_grouping = "";
  2094 +	  _M_data->_M_grouping_size = 0;
  2095 +	  _M_data->_M_use_grouping = false;
  2096 +
  2097 +	  _M_data->_M_decimal_point = '.';
  2098 +	  _M_data->_M_thousands_sep = ',';
  2099 +
  2100 +	  for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
  2101 +	    _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
  2102 +
  2103 +	  for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
  2104 +	    _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
  2105 +	}
  2106 +      else
  2107 +	{
  2108 +	  // Named locale.
  2109 +	  _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT, 
  2110 +							__cloc));
  2111 +	  _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP, 
  2112 +							__cloc));
  2113 +
  2114 +	  // Check for NULL, which implies no grouping.
  2115 +	  if (_M_data->_M_thousands_sep == '\0')
  2116 +	    _M_data->_M_grouping = "";
  2117 +	  else
  2118 +	    _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
  2119 +	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
  2120 +	}
  2121 +
  2122 +      // NB: There is no way to extact this info from posix locales.
  2123 +      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
  2124 +      _M_data->_M_truename = "true";
  2125 +      _M_data->_M_truename_size = 4;
  2126 +      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
  2127 +      _M_data->_M_falsename = "false";
  2128 +      _M_data->_M_falsename_size = 5;
  2129 +    }
  2130 + 
  2131 +  template<> 
  2132 +    numpunct<char>::~numpunct()
  2133 +    { delete _M_data; }
  2134 +   
  2135 +#ifdef _GLIBCXX_USE_WCHAR_T
  2136 +  template<> 
  2137 +    void
  2138 +    numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
  2139 +    {
  2140 +      if (!_M_data)
  2141 +	_M_data = new __numpunct_cache<wchar_t>;
  2142 +
  2143 +      if (!__cloc)
  2144 +	{
  2145 +	  // "C" locale
  2146 +	  _M_data->_M_grouping = "";
  2147 +	  _M_data->_M_grouping_size = 0;
  2148 +	  _M_data->_M_use_grouping = false;
  2149 +
  2150 +	  _M_data->_M_decimal_point = L'.';
  2151 +	  _M_data->_M_thousands_sep = L',';
  2152 +
  2153 +	  // Use ctype::widen code without the facet...
  2154 +	  for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
  2155 +	    _M_data->_M_atoms_out[__i] =
  2156 +	      static_cast<wchar_t>(__num_base::_S_atoms_out[__i]);
  2157 +
  2158 +	  for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
  2159 +	    _M_data->_M_atoms_in[__j] =
  2160 +	      static_cast<wchar_t>(__num_base::_S_atoms_in[__j]);
  2161 +	}
  2162 +      else
  2163 +	{
  2164 +	  // Named locale.
  2165 +	  // NB: In the GNU model wchar_t is always 32 bit wide.
  2166 +#ifdef __UCLIBC_MJN3_ONLY__
  2167 +#warning fix this
  2168 +#endif
  2169 +#ifdef __UCLIBC__
  2170 +# ifdef __UCLIBC_HAS_XLOCALE__
  2171 +	  _M_data->_M_decimal_point = __cloc->decimal_point_wc;
  2172 +	  _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
  2173 +# else
  2174 +	  _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
  2175 +	  _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
  2176 +# endif
  2177 +#else
  2178 +	  union { char *__s; wchar_t __w; } __u;
  2179 +	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
  2180 +	  _M_data->_M_decimal_point = __u.__w;
  2181 +
  2182 +	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
  2183 +	  _M_data->_M_thousands_sep = __u.__w;
  2184 +#endif
  2185 +
  2186 +	  if (_M_data->_M_thousands_sep == L'\0')
  2187 +	    _M_data->_M_grouping = "";
  2188 +	  else
  2189 +	    _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
  2190 +	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
  2191 +	}
  2192 +
  2193 +      // NB: There is no way to extact this info from posix locales.
  2194 +      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
  2195 +      _M_data->_M_truename = L"true";
  2196 +      _M_data->_M_truename_size = 4;
  2197 +      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
  2198 +      _M_data->_M_falsename = L"false";
  2199 +      _M_data->_M_falsename_size = 5;
  2200 +    }
  2201 +
  2202 +  template<> 
  2203 +    numpunct<wchar_t>::~numpunct()
  2204 +    { delete _M_data; }
  2205 + #endif
  2206 +}
  2207 diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/time_members.cc
  2208 --- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/time_members.cc	1969-12-31 18:00:00.000000000 -0600
  2209 +++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/time_members.cc	2005-04-28 01:13:15.000000000 -0500
  2210 @@ -0,0 +1,406 @@
  2211 +// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
  2212 +
  2213 +// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  2214 +//
  2215 +// This file is part of the GNU ISO C++ Library.  This library is free
  2216 +// software; you can redistribute it and/or modify it under the
  2217 +// terms of the GNU General Public License as published by the
  2218 +// Free Software Foundation; either version 2, or (at your option)
  2219 +// any later version.
  2220 +
  2221 +// This library is distributed in the hope that it will be useful,
  2222 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  2223 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2224 +// GNU General Public License for more details.
  2225 +
  2226 +// You should have received a copy of the GNU General Public License along
  2227 +// with this library; see the file COPYING.  If not, write to the Free
  2228 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  2229 +// USA.
  2230 +
  2231 +// As a special exception, you may use this file as part of a free software
  2232 +// library without restriction.  Specifically, if other files instantiate
  2233 +// templates or use macros or inline functions from this file, or you compile
  2234 +// this file and link it with other files to produce an executable, this
  2235 +// file does not by itself cause the resulting executable to be covered by
  2236 +// the GNU General Public License.  This exception does not however
  2237 +// invalidate any other reasons why the executable file might be covered by
  2238 +// the GNU General Public License.
  2239 +
  2240 +//
  2241 +// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
  2242 +// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
  2243 +//
  2244 +
  2245 +// Written by Benjamin Kosnik <bkoz@redhat.com>
  2246 +
  2247 +#include <locale>
  2248 +#include <bits/c++locale_internal.h>
  2249 +
  2250 +#ifdef __UCLIBC_MJN3_ONLY__
  2251 +#warning tailor for stub locale support
  2252 +#endif
  2253 +#ifndef __UCLIBC_HAS_XLOCALE__
  2254 +#define __nl_langinfo_l(N, L)         nl_langinfo((N))
  2255 +#endif
  2256 +
  2257 +namespace std
  2258 +{
  2259 +  template<>
  2260 +    void
  2261 +    __timepunct<char>::
  2262 +    _M_put(char* __s, size_t __maxlen, const char* __format, 
  2263 +	   const tm* __tm) const
  2264 +    {
  2265 +#ifdef __UCLIBC_HAS_XLOCALE__
  2266 +      const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
  2267 +					_M_c_locale_timepunct);
  2268 +#else
  2269 +      char* __old = strdup(setlocale(LC_ALL, NULL));
  2270 +      setlocale(LC_ALL, _M_name_timepunct);
  2271 +      const size_t __len = strftime(__s, __maxlen, __format, __tm);
  2272 +      setlocale(LC_ALL, __old);
  2273 +      free(__old);
  2274 +#endif
  2275 +      // Make sure __s is null terminated.
  2276 +      if (__len == 0)
  2277 +	__s[0] = '\0';
  2278 +    }
  2279 +
  2280 +  template<> 
  2281 +    void
  2282 +    __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
  2283 +    {
  2284 +      if (!_M_data)
  2285 +	_M_data = new __timepunct_cache<char>;
  2286 +
  2287 +      if (!__cloc)
  2288 +	{
  2289 +	  // "C" locale
  2290 +	  _M_c_locale_timepunct = _S_get_c_locale();
  2291 +
  2292 +	  _M_data->_M_date_format = "%m/%d/%y";
  2293 +	  _M_data->_M_date_era_format = "%m/%d/%y";
  2294 +	  _M_data->_M_time_format = "%H:%M:%S";
  2295 +	  _M_data->_M_time_era_format = "%H:%M:%S";
  2296 +	  _M_data->_M_date_time_format = "";
  2297 +	  _M_data->_M_date_time_era_format = "";
  2298 +	  _M_data->_M_am = "AM";
  2299 +	  _M_data->_M_pm = "PM";
  2300 +	  _M_data->_M_am_pm_format = "";
  2301 +
  2302 +	  // Day names, starting with "C"'s Sunday.
  2303 +	  _M_data->_M_day1 = "Sunday";
  2304 +	  _M_data->_M_day2 = "Monday";
  2305 +	  _M_data->_M_day3 = "Tuesday";
  2306 +	  _M_data->_M_day4 = "Wednesday";
  2307 +	  _M_data->_M_day5 = "Thursday";
  2308 +	  _M_data->_M_day6 = "Friday";
  2309 +	  _M_data->_M_day7 = "Saturday";
  2310 +
  2311 +	  // Abbreviated day names, starting with "C"'s Sun.
  2312 +	  _M_data->_M_aday1 = "Sun";
  2313 +	  _M_data->_M_aday2 = "Mon";
  2314 +	  _M_data->_M_aday3 = "Tue";
  2315 +	  _M_data->_M_aday4 = "Wed";
  2316 +	  _M_data->_M_aday5 = "Thu";
  2317 +	  _M_data->_M_aday6 = "Fri";
  2318 +	  _M_data->_M_aday7 = "Sat";
  2319 +
  2320 +	  // Month names, starting with "C"'s January.
  2321 +	  _M_data->_M_month01 = "January";
  2322 +	  _M_data->_M_month02 = "February";
  2323 +	  _M_data->_M_month03 = "March";
  2324 +	  _M_data->_M_month04 = "April";
  2325 +	  _M_data->_M_month05 = "May";
  2326 +	  _M_data->_M_month06 = "June";
  2327 +	  _M_data->_M_month07 = "July";
  2328 +	  _M_data->_M_month08 = "August";
  2329 +	  _M_data->_M_month09 = "September";
  2330 +	  _M_data->_M_month10 = "October";
  2331 +	  _M_data->_M_month11 = "November";
  2332 +	  _M_data->_M_month12 = "December";
  2333 +
  2334 +	  // Abbreviated month names, starting with "C"'s Jan.
  2335 +	  _M_data->_M_amonth01 = "Jan";
  2336 +	  _M_data->_M_amonth02 = "Feb";
  2337 +	  _M_data->_M_amonth03 = "Mar";
  2338 +	  _M_data->_M_amonth04 = "Apr";
  2339 +	  _M_data->_M_amonth05 = "May";
  2340 +	  _M_data->_M_amonth06 = "Jun";
  2341 +	  _M_data->_M_amonth07 = "Jul";
  2342 +	  _M_data->_M_amonth08 = "Aug";
  2343 +	  _M_data->_M_amonth09 = "Sep";
  2344 +	  _M_data->_M_amonth10 = "Oct";
  2345 +	  _M_data->_M_amonth11 = "Nov";
  2346 +	  _M_data->_M_amonth12 = "Dec";
  2347 +	}
  2348 +      else
  2349 +	{
  2350 +	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
  2351 +
  2352 +	  _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
  2353 +	  _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
  2354 +	  _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
  2355 +	  _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
  2356 +	  _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
  2357 +	  _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT,
  2358 +							     __cloc);
  2359 +	  _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
  2360 +	  _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
  2361 +	  _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
  2362 +
  2363 +	  // Day names, starting with "C"'s Sunday.
  2364 +	  _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
  2365 +	  _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
  2366 +	  _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
  2367 +	  _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
  2368 +	  _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
  2369 +	  _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
  2370 +	  _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
  2371 +
  2372 +	  // Abbreviated day names, starting with "C"'s Sun.
  2373 +	  _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
  2374 +	  _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
  2375 +	  _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
  2376 +	  _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
  2377 +	  _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
  2378 +	  _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
  2379 +	  _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
  2380 +
  2381 +	  // Month names, starting with "C"'s January.
  2382 +	  _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
  2383 +	  _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
  2384 +	  _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
  2385 +	  _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
  2386 +	  _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
  2387 +	  _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
  2388 +	  _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
  2389 +	  _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
  2390 +	  _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
  2391 +	  _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
  2392 +	  _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
  2393 +	  _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
  2394 +
  2395 +	  // Abbreviated month names, starting with "C"'s Jan.
  2396 +	  _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
  2397 +	  _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
  2398 +	  _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
  2399 +	  _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
  2400 +	  _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
  2401 +	  _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
  2402 +	  _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
  2403 +	  _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
  2404 +	  _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
  2405 +	  _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
  2406 +	  _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
  2407 +	  _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
  2408 +	}
  2409 +    }
  2410 +
  2411 +#ifdef _GLIBCXX_USE_WCHAR_T
  2412 +  template<>
  2413 +    void
  2414 +    __timepunct<wchar_t>::
  2415 +    _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format, 
  2416 +	   const tm* __tm) const
  2417 +    {
  2418 +#ifdef __UCLIBC_HAS_XLOCALE__
  2419 +      __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
  2420 +      const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
  2421 +					_M_c_locale_timepunct);
  2422 +#else
  2423 +      char* __old = strdup(setlocale(LC_ALL, NULL));
  2424 +      setlocale(LC_ALL, _M_name_timepunct);
  2425 +      const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
  2426 +      setlocale(LC_ALL, __old);
  2427 +      free(__old);
  2428 +#endif
  2429 +      // Make sure __s is null terminated.
  2430 +      if (__len == 0)
  2431 +	__s[0] = L'\0';
  2432 +    }
  2433 +
  2434 +  template<> 
  2435 +    void
  2436 +    __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
  2437 +    {
  2438 +      if (!_M_data)
  2439 +	_M_data = new __timepunct_cache<wchar_t>;
  2440 +
  2441 +#warning wide time stuff
  2442 +//       if (!__cloc)
  2443 +	{
  2444 +	  // "C" locale
  2445 +	  _M_c_locale_timepunct = _S_get_c_locale();
  2446 +
  2447 +	  _M_data->_M_date_format = L"%m/%d/%y";
  2448 +	  _M_data->_M_date_era_format = L"%m/%d/%y";
  2449 +	  _M_data->_M_time_format = L"%H:%M:%S";
  2450 +	  _M_data->_M_time_era_format = L"%H:%M:%S";
  2451 +	  _M_data->_M_date_time_format = L"";
  2452 +	  _M_data->_M_date_time_era_format = L"";
  2453 +	  _M_data->_M_am = L"AM";
  2454 +	  _M_data->_M_pm = L"PM";
  2455 +	  _M_data->_M_am_pm_format = L"";
  2456 +
  2457 +	  // Day names, starting with "C"'s Sunday.
  2458 +	  _M_data->_M_day1 = L"Sunday";
  2459 +	  _M_data->_M_day2 = L"Monday";
  2460 +	  _M_data->_M_day3 = L"Tuesday";
  2461 +	  _M_data->_M_day4 = L"Wednesday";
  2462 +	  _M_data->_M_day5 = L"Thursday";
  2463 +	  _M_data->_M_day6 = L"Friday";
  2464 +	  _M_data->_M_day7 = L"Saturday";
  2465 +
  2466 +	  // Abbreviated day names, starting with "C"'s Sun.
  2467 +	  _M_data->_M_aday1 = L"Sun";
  2468 +	  _M_data->_M_aday2 = L"Mon";
  2469 +	  _M_data->_M_aday3 = L"Tue";
  2470 +	  _M_data->_M_aday4 = L"Wed";
  2471 +	  _M_data->_M_aday5 = L"Thu";
  2472 +	  _M_data->_M_aday6 = L"Fri";
  2473 +	  _M_data->_M_aday7 = L"Sat";
  2474 +
  2475 +	  // Month names, starting with "C"'s January.
  2476 +	  _M_data->_M_month01 = L"January";
  2477 +	  _M_data->_M_month02 = L"February";
  2478 +	  _M_data->_M_month03 = L"March";
  2479 +	  _M_data->_M_month04 = L"April";
  2480 +	  _M_data->_M_month05 = L"May";
  2481 +	  _M_data->_M_month06 = L"June";
  2482 +	  _M_data->_M_month07 = L"July";
  2483 +	  _M_data->_M_month08 = L"August";
  2484 +	  _M_data->_M_month09 = L"September";
  2485 +	  _M_data->_M_month10 = L"October";
  2486 +	  _M_data->_M_month11 = L"November";
  2487 +	  _M_data->_M_month12 = L"December";
  2488 +
  2489 +	  // Abbreviated month names, starting with "C"'s Jan.
  2490 +	  _M_data->_M_amonth01 = L"Jan";
  2491 +	  _M_data->_M_amonth02 = L"Feb";
  2492 +	  _M_data->_M_amonth03 = L"Mar";
  2493 +	  _M_data->_M_amonth04 = L"Apr";
  2494 +	  _M_data->_M_amonth05 = L"May";
  2495 +	  _M_data->_M_amonth06 = L"Jun";
  2496 +	  _M_data->_M_amonth07 = L"Jul";
  2497 +	  _M_data->_M_amonth08 = L"Aug";
  2498 +	  _M_data->_M_amonth09 = L"Sep";
  2499 +	  _M_data->_M_amonth10 = L"Oct";
  2500 +	  _M_data->_M_amonth11 = L"Nov";
  2501 +	  _M_data->_M_amonth12 = L"Dec";
  2502 +	}
  2503 +#if 0
  2504 +      else
  2505 +	{
  2506 +	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
  2507 +
  2508 +	  union { char *__s; wchar_t *__w; } __u;
  2509 +
  2510 +	  __u.__s = __nl_langinfo_l(_NL_WD_FMT, __cloc);
  2511 +	  _M_data->_M_date_format = __u.__w;
  2512 +	  __u.__s = __nl_langinfo_l(_NL_WERA_D_FMT, __cloc);
  2513 +	  _M_data->_M_date_era_format = __u.__w;
  2514 +	  __u.__s = __nl_langinfo_l(_NL_WT_FMT, __cloc);
  2515 +	  _M_data->_M_time_format = __u.__w;
  2516 +	  __u.__s = __nl_langinfo_l(_NL_WERA_T_FMT, __cloc);
  2517 +	  _M_data->_M_time_era_format = __u.__w;
  2518 +	  __u.__s = __nl_langinfo_l(_NL_WD_T_FMT, __cloc);
  2519 +	  _M_data->_M_date_time_format = __u.__w;
  2520 +	  __u.__s = __nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc);
  2521 +	  _M_data->_M_date_time_era_format = __u.__w;
  2522 +	  __u.__s = __nl_langinfo_l(_NL_WAM_STR, __cloc);
  2523 +	  _M_data->_M_am = __u.__w;
  2524 +	  __u.__s = __nl_langinfo_l(_NL_WPM_STR, __cloc);
  2525 +	  _M_data->_M_pm = __u.__w;
  2526 +	  __u.__s = __nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc);
  2527 +	  _M_data->_M_am_pm_format = __u.__w;
  2528 +
  2529 +	  // Day names, starting with "C"'s Sunday.
  2530 +	  __u.__s = __nl_langinfo_l(_NL_WDAY_1, __cloc);
  2531 +	  _M_data->_M_day1 = __u.__w;
  2532 +	  __u.__s = __nl_langinfo_l(_NL_WDAY_2, __cloc);
  2533 +	  _M_data->_M_day2 = __u.__w;
  2534 +	  __u.__s = __nl_langinfo_l(_NL_WDAY_3, __cloc);
  2535 +	  _M_data->_M_day3 = __u.__w;
  2536 +	  __u.__s = __nl_langinfo_l(_NL_WDAY_4, __cloc);
  2537 +	  _M_data->_M_day4 = __u.__w;
  2538 +	  __u.__s = __nl_langinfo_l(_NL_WDAY_5, __cloc);
  2539 +	  _M_data->_M_day5 = __u.__w;
  2540 +	  __u.__s = __nl_langinfo_l(_NL_WDAY_6, __cloc);
  2541 +	  _M_data->_M_day6 = __u.__w;
  2542 +	  __u.__s = __nl_langinfo_l(_NL_WDAY_7, __cloc);
  2543 +	  _M_data->_M_day7 = __u.__w;
  2544 +
  2545 +	  // Abbreviated day names, starting with "C"'s Sun.
  2546 +	  __u.__s = __nl_langinfo_l(_NL_WABDAY_1, __cloc);
  2547 +	  _M_data->_M_aday1 = __u.__w;
  2548 +	  __u.__s = __nl_langinfo_l(_NL_WABDAY_2, __cloc);
  2549 +	  _M_data->_M_aday2 = __u.__w;
  2550 +	  __u.__s = __nl_langinfo_l(_NL_WABDAY_3, __cloc);
  2551 +	  _M_data->_M_aday3 = __u.__w;
  2552 +	  __u.__s = __nl_langinfo_l(_NL_WABDAY_4, __cloc);
  2553 +	  _M_data->_M_aday4 = __u.__w;
  2554 +	  __u.__s = __nl_langinfo_l(_NL_WABDAY_5, __cloc);
  2555 +	  _M_data->_M_aday5 = __u.__w;
  2556 +	  __u.__s = __nl_langinfo_l(_NL_WABDAY_6, __cloc);
  2557 +	  _M_data->_M_aday6 = __u.__w;
  2558 +	  __u.__s = __nl_langinfo_l(_NL_WABDAY_7, __cloc);
  2559 +	  _M_data->_M_aday7 = __u.__w;
  2560 +
  2561 +	  // Month names, starting with "C"'s January.
  2562 +	  __u.__s = __nl_langinfo_l(_NL_WMON_1, __cloc);
  2563 +	  _M_data->_M_month01 = __u.__w;
  2564 +	  __u.__s = __nl_langinfo_l(_NL_WMON_2, __cloc);
  2565 +	  _M_data->_M_month02 = __u.__w;
  2566 +	  __u.__s = __nl_langinfo_l(_NL_WMON_3, __cloc);
  2567 +	  _M_data->_M_month03 = __u.__w;
  2568 +	  __u.__s = __nl_langinfo_l(_NL_WMON_4, __cloc);
  2569 +	  _M_data->_M_month04 = __u.__w;
  2570 +	  __u.__s = __nl_langinfo_l(_NL_WMON_5, __cloc);
  2571 +	  _M_data->_M_month05 = __u.__w;
  2572 +	  __u.__s = __nl_langinfo_l(_NL_WMON_6, __cloc);
  2573 +	  _M_data->_M_month06 = __u.__w;
  2574 +	  __u.__s = __nl_langinfo_l(_NL_WMON_7, __cloc);
  2575 +	  _M_data->_M_month07 = __u.__w;
  2576 +	  __u.__s = __nl_langinfo_l(_NL_WMON_8, __cloc);
  2577 +	  _M_data->_M_month08 = __u.__w;
  2578 +	  __u.__s = __nl_langinfo_l(_NL_WMON_9, __cloc);
  2579 +	  _M_data->_M_month09 = __u.__w;
  2580 +	  __u.__s = __nl_langinfo_l(_NL_WMON_10, __cloc);
  2581 +	  _M_data->_M_month10 = __u.__w;
  2582 +	  __u.__s = __nl_langinfo_l(_NL_WMON_11, __cloc);
  2583 +	  _M_data->_M_month11 = __u.__w;
  2584 +	  __u.__s = __nl_langinfo_l(_NL_WMON_12, __cloc);
  2585 +	  _M_data->_M_month12 = __u.__w;
  2586 +
  2587 +	  // Abbreviated month names, starting with "C"'s Jan.
  2588 +	  __u.__s = __nl_langinfo_l(_NL_WABMON_1, __cloc);
  2589 +	  _M_data->_M_amonth01 = __u.__w;
  2590 +	  __u.__s = __nl_langinfo_l(_NL_WABMON_2, __cloc);
  2591 +	  _M_data->_M_amonth02 = __u.__w;
  2592 +	  __u.__s = __nl_langinfo_l(_NL_WABMON_3, __cloc);
  2593 +	  _M_data->_M_amonth03 = __u.__w;
  2594 +	  __u.__s = __nl_langinfo_l(_NL_WABMON_4, __cloc);
  2595 +	  _M_data->_M_amonth04 = __u.__w;
  2596 +	  __u.__s = __nl_langinfo_l(_NL_WABMON_5, __cloc);
  2597 +	  _M_data->_M_amonth05 = __u.__w;
  2598 +	  __u.__s = __nl_langinfo_l(_NL_WABMON_6, __cloc);
  2599 +	  _M_data->_M_amonth06 = __u.__w;
  2600 +	  __u.__s = __nl_langinfo_l(_NL_WABMON_7, __cloc);
  2601 +	  _M_data->_M_amonth07 = __u.__w;
  2602 +	  __u.__s = __nl_langinfo_l(_NL_WABMON_8, __cloc);
  2603 +	  _M_data->_M_amonth08 = __u.__w;
  2604 +	  __u.__s = __nl_langinfo_l(_NL_WABMON_9, __cloc);
  2605 +	  _M_data->_M_amonth09 = __u.__w;
  2606 +	  __u.__s = __nl_langinfo_l(_NL_WABMON_10, __cloc);
  2607 +	  _M_data->_M_amonth10 = __u.__w;
  2608 +	  __u.__s = __nl_langinfo_l(_NL_WABMON_11, __cloc);
  2609 +	  _M_data->_M_amonth11 = __u.__w;
  2610 +	  __u.__s = __nl_langinfo_l(_NL_WABMON_12, __cloc);
  2611 +	  _M_data->_M_amonth12 = __u.__w;
  2612 +	}
  2613 +#endif // 0
  2614 +    }
  2615 +#endif
  2616 +}
  2617 diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/time_members.h gcc-4.0.0/libstdc++-v3/config/locale/uclibc/time_members.h
  2618 --- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/time_members.h	1969-12-31 18:00:00.000000000 -0600
  2619 +++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/time_members.h	2004-05-22 18:46:31.000000000 -0500
  2620 @@ -0,0 +1,68 @@
  2621 +// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
  2622 +
  2623 +// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  2624 +//
  2625 +// This file is part of the GNU ISO C++ Library.  This library is free
  2626 +// software; you can redistribute it and/or modify it under the
  2627 +// terms of the GNU General Public License as published by the
  2628 +// Free Software Foundation; either version 2, or (at your option)
  2629 +// any later version.
  2630 +
  2631 +// This library is distributed in the hope that it will be useful,
  2632 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  2633 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2634 +// GNU General Public License for more details.
  2635 +
  2636 +// You should have received a copy of the GNU General Public License along
  2637 +// with this library; see the file COPYING.  If not, write to the Free
  2638 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  2639 +// USA.
  2640 +
  2641 +// As a special exception, you may use this file as part of a free software
  2642 +// library without restriction.  Specifically, if other files instantiate
  2643 +// templates or use macros or inline functions from this file, or you compile
  2644 +// this file and link it with other files to produce an executable, this
  2645 +// file does not by itself cause the resulting executable to be covered by
  2646 +// the GNU General Public License.  This exception does not however
  2647 +// invalidate any other reasons why the executable file might be covered by
  2648 +// the GNU General Public License.
  2649 +
  2650 +//
  2651 +// ISO C++ 14882: 22.2.5.1.2 - time_get functions
  2652 +// ISO C++ 14882: 22.2.5.3.2 - time_put functions
  2653 +//
  2654 +
  2655 +// Written by Benjamin Kosnik <bkoz@redhat.com>
  2656 +
  2657 +  template<typename _CharT>
  2658 +    __timepunct<_CharT>::__timepunct(size_t __refs) 
  2659 +    : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), 
  2660 +    _M_name_timepunct(_S_get_c_name())
  2661 +    { _M_initialize_timepunct(); }
  2662 +
  2663 +  template<typename _CharT>
  2664 +    __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs) 
  2665 +    : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL), 
  2666 +    _M_name_timepunct(_S_get_c_name())
  2667 +    { _M_initialize_timepunct(); }
  2668 +
  2669 +  template<typename _CharT>
  2670 +    __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
  2671 +				     size_t __refs) 
  2672 +    : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), 
  2673 +    _M_name_timepunct(__s)
  2674 +    { 
  2675 +      char* __tmp = new char[std::strlen(__s) + 1];
  2676 +      std::strcpy(__tmp, __s);
  2677 +      _M_name_timepunct = __tmp;
  2678 +      _M_initialize_timepunct(__cloc); 
  2679 +    }
  2680 +
  2681 +  template<typename _CharT>
  2682 +    __timepunct<_CharT>::~__timepunct()
  2683 +    { 
  2684 +      if (_M_name_timepunct != _S_get_c_name())
  2685 +	delete [] _M_name_timepunct;
  2686 +      delete _M_data; 
  2687 +      _S_destroy_c_locale(_M_c_locale_timepunct); 
  2688 +    }
  2689 diff -urN gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_base.h
  2690 --- gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_base.h	1969-12-31 18:00:00.000000000 -0600
  2691 +++ gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_base.h	2005-04-28 01:10:27.000000000 -0500
  2692 @@ -0,0 +1,64 @@
  2693 +// Locale support -*- C++ -*-
  2694 +
  2695 +// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004
  2696 +// Free Software Foundation, Inc.
  2697 +//
  2698 +// This file is part of the GNU ISO C++ Library.  This library is free
  2699 +// software; you can redistribute it and/or modify it under the
  2700 +// terms of the GNU General Public License as published by the
  2701 +// Free Software Foundation; either version 2, or (at your option)
  2702 +// any later version.
  2703 +
  2704 +// This library is distributed in the hope that it will be useful,
  2705 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  2706 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2707 +// GNU General Public License for more details.
  2708 +
  2709 +// You should have received a copy of the GNU General Public License along
  2710 +// with this library; see the file COPYING.  If not, write to the Free
  2711 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  2712 +// USA.
  2713 +
  2714 +// As a special exception, you may use this file as part of a free software
  2715 +// library without restriction.  Specifically, if other files instantiate
  2716 +// templates or use macros or inline functions from this file, or you compile
  2717 +// this file and link it with other files to produce an executable, this
  2718 +// file does not by itself cause the resulting executable to be covered by
  2719 +// the GNU General Public License.  This exception does not however
  2720 +// invalidate any other reasons why the executable file might be covered by
  2721 +// the GNU General Public License.
  2722 +
  2723 +//
  2724 +// ISO C++ 14882: 22.1  Locales
  2725 +//
  2726 +  
  2727 +/** @file ctype_base.h
  2728 + *  This is an internal header file, included by other library headers.
  2729 + *  You should not attempt to use it directly.
  2730 + */
  2731 +
  2732 +// Information as gleaned from /usr/include/ctype.h
  2733 +  
  2734 +  /// @brief  Base class for ctype.
  2735 +  struct ctype_base
  2736 +  {
  2737 +    // Note: In uClibc, the following two types depend on configuration.
  2738 + 
  2739 +    // Non-standard typedefs.
  2740 +    typedef const __ctype_touplow_t* __to_type;
  2741 +
  2742 +    // NB: Offsets into ctype<char>::_M_table force a particular size
  2743 +    // on the mask type. Because of this, we don't use an enum.
  2744 +    typedef __ctype_mask_t	mask;   
  2745 +    static const mask upper    	= _ISupper;
  2746 +    static const mask lower 	= _ISlower;
  2747 +    static const mask alpha 	= _ISalpha;
  2748 +    static const mask digit 	= _ISdigit;
  2749 +    static const mask xdigit 	= _ISxdigit;
  2750 +    static const mask space 	= _ISspace;
  2751 +    static const mask print 	= _ISprint;
  2752 +    static const mask graph 	= _ISalpha | _ISdigit | _ISpunct;
  2753 +    static const mask cntrl 	= _IScntrl;
  2754 +    static const mask punct 	= _ISpunct;
  2755 +    static const mask alnum 	= _ISalpha | _ISdigit;
  2756 +  };
  2757 diff -urN gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_inline.h
  2758 --- gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_inline.h	1969-12-31 18:00:00.000000000 -0600
  2759 +++ gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_inline.h	2002-06-24 00:49:19.000000000 -0500
  2760 @@ -0,0 +1,69 @@
  2761 +// Locale support -*- C++ -*-
  2762 +
  2763 +// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
  2764 +//
  2765 +// This file is part of the GNU ISO C++ Library.  This library is free
  2766 +// software; you can redistribute it and/or modify it under the
  2767 +// terms of the GNU General Public License as published by the
  2768 +// Free Software Foundation; either version 2, or (at your option)
  2769 +// any later version.
  2770 +
  2771 +// This library is distributed in the hope that it will be useful,
  2772 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  2773 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2774 +// GNU General Public License for more details.
  2775 +
  2776 +// You should have received a copy of the GNU General Public License along
  2777 +// with this library; see the file COPYING.  If not, write to the Free
  2778 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  2779 +// USA.
  2780 +
  2781 +// As a special exception, you may use this file as part of a free software
  2782 +// library without restriction.  Specifically, if other files instantiate
  2783 +// templates or use macros or inline functions from this file, or you compile
  2784 +// this file and link it with other files to produce an executable, this
  2785 +// file does not by itself cause the resulting executable to be covered by
  2786 +// the GNU General Public License.  This exception does not however
  2787 +// invalidate any other reasons why the executable file might be covered by
  2788 +// the GNU General Public License.
  2789 +
  2790 +//
  2791 +// ISO C++ 14882: 22.1  Locales
  2792 +//
  2793 +  
  2794 +// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
  2795 +// functions go in ctype.cc
  2796 +  
  2797 +  bool
  2798 +  ctype<char>::
  2799 +  is(mask __m, char __c) const
  2800 +  { return _M_table[static_cast<unsigned char>(__c)] & __m; }
  2801 +
  2802 +  const char*
  2803 +  ctype<char>::
  2804 +  is(const char* __low, const char* __high, mask* __vec) const
  2805 +  {
  2806 +    while (__low < __high)
  2807 +      *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
  2808 +    return __high;
  2809 +  }
  2810 +
  2811 +  const char*
  2812 +  ctype<char>::
  2813 +  scan_is(mask __m, const char* __low, const char* __high) const
  2814 +  {
  2815 +    while (__low < __high 
  2816 +	   && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
  2817 +      ++__low;
  2818 +    return __low;
  2819 +  }
  2820 +
  2821 +  const char*
  2822 +  ctype<char>::
  2823 +  scan_not(mask __m, const char* __low, const char* __high) const
  2824 +  {
  2825 +    while (__low < __high 
  2826 +	   && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
  2827 +      ++__low;
  2828 +    return __low;
  2829 +  }
  2830 diff -urN gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h
  2831 --- gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_noninline.h	1969-12-31 18:00:00.000000000 -0600
  2832 +++ gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h	2005-04-28 01:10:27.000000000 -0500
  2833 @@ -0,0 +1,92 @@
  2834 +// Locale support -*- C++ -*-
  2835 +
  2836 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004
  2837 +// Free Software Foundation, Inc.
  2838 +//
  2839 +// This file is part of the GNU ISO C++ Library.  This library is free
  2840 +// software; you can redistribute it and/or modify it under the
  2841 +// terms of the GNU General Public License as published by the
  2842 +// Free Software Foundation; either version 2, or (at your option)
  2843 +// any later version.
  2844 +
  2845 +// This library is distributed in the hope that it will be useful,
  2846 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  2847 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2848 +// GNU General Public License for more details.
  2849 +
  2850 +// You should have received a copy of the GNU General Public License along
  2851 +// with this library; see the file COPYING.  If not, write to the Free
  2852 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  2853 +// USA.
  2854 +
  2855 +// As a special exception, you may use this file as part of a free software
  2856 +// library without restriction.  Specifically, if other files instantiate
  2857 +// templates or use macros or inline functions from this file, or you compile
  2858 +// this file and link it with other files to produce an executable, this
  2859 +// file does not by itself cause the resulting executable to be covered by
  2860 +// the GNU General Public License.  This exception does not however
  2861 +// invalidate any other reasons why the executable file might be covered by
  2862 +// the GNU General Public License.
  2863 +
  2864 +//
  2865 +// ISO C++ 14882: 22.1  Locales
  2866 +//
  2867 +  
  2868 +// Information as gleaned from /usr/include/ctype.h
  2869 +
  2870 +  const ctype_base::mask*
  2871 +  ctype<char>::classic_table() throw()
  2872 +  { return __C_ctype_b; }
  2873 +
  2874 +  ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
  2875 +		     size_t __refs) 
  2876 +  : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()), 
  2877 +  _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
  2878 +  {
  2879 +    _M_toupper = __C_ctype_toupper;
  2880 +    _M_tolower = __C_ctype_tolower;
  2881 +    _M_table = __table ? __table : __C_ctype_b;
  2882 +    memset(_M_widen, 0, sizeof(_M_widen));
  2883 +    memset(_M_narrow, 0, sizeof(_M_narrow));
  2884 +  }
  2885 +
  2886 +  ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
  2887 +  : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()), 
  2888 +  _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
  2889 +  {
  2890 +    _M_toupper = __C_ctype_toupper;
  2891 +    _M_tolower = __C_ctype_tolower;
  2892 +    _M_table = __table ? __table : __C_ctype_b;
  2893 +    memset(_M_widen, 0, sizeof(_M_widen));
  2894 +    memset(_M_narrow, 0, sizeof(_M_narrow));
  2895 +  }
  2896 +
  2897 +  char
  2898 +  ctype<char>::do_toupper(char __c) const
  2899 +  { return _M_toupper[static_cast<unsigned char>(__c)]; }
  2900 +
  2901 +  const char*
  2902 +  ctype<char>::do_toupper(char* __low, const char* __high) const
  2903 +  {
  2904 +    while (__low < __high)
  2905 +      {
  2906 +	*__low = _M_toupper[static_cast<unsigned char>(*__low)];
  2907 +	++__low;
  2908 +      }
  2909 +    return __high;
  2910 +  }
  2911 +
  2912 +  char
  2913 +  ctype<char>::do_tolower(char __c) const
  2914 +  { return _M_tolower[static_cast<unsigned char>(__c)]; }
  2915 +
  2916 +  const char* 
  2917 +  ctype<char>::do_tolower(char* __low, const char* __high) const
  2918 +  {
  2919 +    while (__low < __high)
  2920 +      {
  2921 +	*__low = _M_tolower[static_cast<unsigned char>(*__low)];
  2922 +	++__low;
  2923 +      }
  2924 +    return __high;
  2925 +  }
  2926 diff -urN gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/os_defines.h gcc-4.0.0/libstdc++-v3/config/os/uclibc/os_defines.h
  2927 --- gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/os_defines.h	1969-12-31 18:00:00.000000000 -0600
  2928 +++ gcc-4.0.0/libstdc++-v3/config/os/uclibc/os_defines.h	2005-04-28 01:10:27.000000000 -0500
  2929 @@ -0,0 +1,44 @@
  2930 +// Specific definitions for GNU/Linux  -*- C++ -*-
  2931 +
  2932 +// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  2933 +//
  2934 +// This file is part of the GNU ISO C++ Library.  This library is free
  2935 +// software; you can redistribute it and/or modify it under the
  2936 +// terms of the GNU General Public License as published by the
  2937 +// Free Software Foundation; either version 2, or (at your option)
  2938 +// any later version.
  2939 +
  2940 +// This library is distributed in the hope that it will be useful,
  2941 +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  2942 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2943 +// GNU General Public License for more details.
  2944 +
  2945 +// You should have received a copy of the GNU General Public License along
  2946 +// with this library; see the file COPYING.  If not, write to the Free
  2947 +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  2948 +// USA.
  2949 +
  2950 +// As a special exception, you may use this file as part of a free software
  2951 +// library without restriction.  Specifically, if other files instantiate
  2952 +// templates or use macros or inline functions from this file, or you compile
  2953 +// this file and link it with other files to produce an executable, this
  2954 +// file does not by itself cause the resulting executable to be covered by
  2955 +// the GNU General Public License.  This exception does not however
  2956 +// invalidate any other reasons why the executable file might be covered by
  2957 +// the GNU General Public License.
  2958 +
  2959 +#ifndef _GLIBCXX_OS_DEFINES
  2960 +#define _GLIBCXX_OS_DEFINES 1
  2961 +
  2962 +// System-specific #define, typedefs, corrections, etc, go here.  This
  2963 +// file will come before all others.
  2964 +
  2965 +// This keeps isanum, et al from being propagated as macros.
  2966 +#define __NO_CTYPE 1
  2967 +
  2968 +#include <features.h>
  2969 +
  2970 +// We must not see the optimized string functions GNU libc defines.
  2971 +#define __NO_STRING_INLINES
  2972 +
  2973 +#endif
  2974 diff -urN gcc-4.0.0-100/libstdc++-v3/configure gcc-4.0.0/libstdc++-v3/configure
  2975 --- gcc-4.0.0-100/libstdc++-v3/configure	2005-04-30 13:06:53.683055232 -0500
  2976 +++ gcc-4.0.0/libstdc++-v3/configure	2005-04-30 12:24:24.000000000 -0500
  2977 @@ -3998,6 +3998,11 @@
  2978    lt_cv_deplibs_check_method=pass_all
  2979    ;;
  2980  
  2981 +linux-uclibc*)
  2982 +  lt_cv_deplibs_check_method=pass_all
  2983 +  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
  2984 +  ;;
  2985 +
  2986  netbsd* | knetbsd*-gnu)
  2987    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
  2988      lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
  2989 @@ -5672,7 +5677,7 @@
  2990    enableval="$enable_clocale"
  2991  
  2992        case "$enableval" in
  2993 -       generic|gnu|ieee_1003.1-2001|yes|no|auto) ;;
  2994 +       generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto) ;;
  2995         *) { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable clocale" >&5
  2996  echo "$as_me: error: Unknown argument to enable/disable clocale" >&2;}
  2997     { (exit 1); exit 1; }; } ;;
  2998 @@ -5697,6 +5702,9 @@
  2999    # Default to "generic".
  3000    if test $enable_clocale_flag = auto; then
  3001      case ${target_os} in
  3002 +      linux-uclibc*)
  3003 +	enable_clocale_flag=uclibc
  3004 +	;;
  3005        linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
  3006          cat >conftest.$ac_ext <<_ACEOF
  3007  /* confdefs.h.  */
  3008 @@ -5927,6 +5935,76 @@
  3009        CTIME_CC=config/locale/generic/time_members.cc
  3010        CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
  3011        ;;
  3012 +    uclibc)
  3013 +      echo "$as_me:$LINENO: result: uclibc" >&5
  3014 +echo "${ECHO_T}uclibc" >&6
  3015 +
  3016 +      # Declare intention to use gettext, and add support for specific
  3017 +      # languages.
  3018 +      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
  3019 +      ALL_LINGUAS="de fr"
  3020 +
  3021 +      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
  3022 +      # Extract the first word of "msgfmt", so it can be a program name with args.
  3023 +set dummy msgfmt; ac_word=$2
  3024 +echo "$as_me:$LINENO: checking for $ac_word" >&5
  3025 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  3026 +if test "${ac_cv_prog_check_msgfmt+set}" = set; then
  3027 +  echo $ECHO_N "(cached) $ECHO_C" >&6
  3028 +else
  3029 +  if test -n "$check_msgfmt"; then
  3030 +  ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
  3031 +else
  3032 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  3033 +for as_dir in $PATH
  3034 +do
  3035 +  IFS=$as_save_IFS
  3036 +  test -z "$as_dir" && as_dir=.
  3037 +  for ac_exec_ext in '' $ac_executable_extensions; do
  3038 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  3039 +    ac_cv_prog_check_msgfmt="yes"
  3040 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  3041 +    break 2
  3042 +  fi
  3043 +done
  3044 +done
  3045 +
  3046 +  test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
  3047 +fi
  3048 +fi
  3049 +check_msgfmt=$ac_cv_prog_check_msgfmt
  3050 +if test -n "$check_msgfmt"; then
  3051 +  echo "$as_me:$LINENO: result: $check_msgfmt" >&5
  3052 +echo "${ECHO_T}$check_msgfmt" >&6
  3053 +else
  3054 +  echo "$as_me:$LINENO: result: no" >&5
  3055 +echo "${ECHO_T}no" >&6
  3056 +fi
  3057 +
  3058 +      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
  3059 +        USE_NLS=yes
  3060 +      fi
  3061 +      # Export the build objects.
  3062 +      for ling in $ALL_LINGUAS; do \
  3063 +        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
  3064 +        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
  3065 +      done
  3066 +
  3067 +
  3068 +
  3069 +      CLOCALE_H=config/locale/uclibc/c_locale.h
  3070 +      CLOCALE_CC=config/locale/uclibc/c_locale.cc
  3071 +      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
  3072 +      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
  3073 +      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
  3074 +      CMESSAGES_H=config/locale/uclibc/messages_members.h
  3075 +      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
  3076 +      CMONEY_CC=config/locale/uclibc/monetary_members.cc
  3077 +      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
  3078 +      CTIME_H=config/locale/uclibc/time_members.h
  3079 +      CTIME_CC=config/locale/uclibc/time_members.cc
  3080 +      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
  3081 +      ;;
  3082    esac
  3083  
  3084    # This is where the testsuite looks for locale catalogs, using the
  3085 diff -urN gcc-4.0.0-100/libstdc++-v3/configure.host gcc-4.0.0/libstdc++-v3/configure.host
  3086 --- gcc-4.0.0-100/libstdc++-v3/configure.host	2005-04-30 13:06:53.688054472 -0500
  3087 +++ gcc-4.0.0/libstdc++-v3/configure.host	2005-04-28 20:20:32.000000000 -0500
  3088 @@ -249,6 +249,12 @@
  3089      ;;
  3090  esac
  3091  
  3092 +# Override for uClibc since linux-uclibc gets mishandled above.
  3093 +case "${host_os}" in
  3094 +  *-uclibc*)
  3095 +    os_include_dir="os/uclibc"
  3096 +    ;;
  3097 +esac
  3098  
  3099  # Set any OS-dependent and CPU-dependent bits.
  3100  # THIS TABLE IS SORTED.  KEEP IT THAT WAY.
  3101 diff -urN gcc-4.0.0-100/libstdc++-v3/crossconfig.m4 gcc-4.0.0/libstdc++-v3/crossconfig.m4
  3102 --- gcc-4.0.0-100/libstdc++-v3/crossconfig.m4	2005-04-30 13:06:53.689054320 -0500
  3103 +++ gcc-4.0.0/libstdc++-v3/crossconfig.m4	2005-04-28 20:27:15.000000000 -0500
  3104 @@ -142,6 +142,98 @@
  3105  	;;
  3106      esac
  3107      ;;
  3108 +  *-uclibc*)
  3109 +# Temporary hack until we implement the float versions of the libm funcs
  3110 +    AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
  3111 +      machine/endian.h machine/param.h sys/machine.h sys/types.h \
  3112 +      fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
  3113 +    SECTION_FLAGS='-ffunction-sections -fdata-sections'
  3114 +    AC_SUBST(SECTION_FLAGS)
  3115 +    GLIBCXX_CHECK_LINKER_FEATURES
  3116 +    GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
  3117 +    GLIBCXX_CHECK_WCHAR_T_SUPPORT
  3118 +
  3119 +    # For LFS.
  3120 +    AC_DEFINE(HAVE_INT64_T)
  3121 +    case "$target" in
  3122 +      *-uclinux*)
  3123 +        # Don't enable LFS with uClinux
  3124 +        ;;
  3125 +      *)
  3126 +        AC_DEFINE(_GLIBCXX_USE_LFS)
  3127 +    esac
  3128 +
  3129 +    # For showmanyc_helper().
  3130 +    AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
  3131 +    GLIBCXX_CHECK_POLL
  3132 +    GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
  3133 +
  3134 +    # For xsputn_2().
  3135 +    AC_CHECK_HEADERS(sys/uio.h)
  3136 +    GLIBCXX_CHECK_WRITEV
  3137 +
  3138 +#     AC_DEFINE(HAVE_ACOSF)
  3139 +#     AC_DEFINE(HAVE_ASINF)
  3140 +#     AC_DEFINE(HAVE_ATANF)
  3141 +#     AC_DEFINE(HAVE_ATAN2F)
  3142 +    AC_DEFINE(HAVE_CEILF)
  3143 +    AC_DEFINE(HAVE_COPYSIGN)
  3144 +#     AC_DEFINE(HAVE_COPYSIGNF)
  3145 +#     AC_DEFINE(HAVE_COSF)
  3146 +#     AC_DEFINE(HAVE_COSHF)
  3147 +#     AC_DEFINE(HAVE_EXPF)
  3148 +#     AC_DEFINE(HAVE_FABSF)
  3149 +    AC_DEFINE(HAVE_FINITE)
  3150 +    AC_DEFINE(HAVE_FINITEF)
  3151 +    AC_DEFINE(HAVE_FLOORF)
  3152 +#     AC_DEFINE(HAVE_FMODF)
  3153 +#     AC_DEFINE(HAVE_FREXPF)
  3154 +    AC_DEFINE(HAVE_HYPOT)
  3155 +#     AC_DEFINE(HAVE_HYPOTF)
  3156 +    AC_DEFINE(HAVE_ISINF)
  3157 +    AC_DEFINE(HAVE_ISINFF)
  3158 +    AC_DEFINE(HAVE_ISNAN)
  3159 +    AC_DEFINE(HAVE_ISNANF)
  3160 +#     AC_DEFINE(HAVE_LOGF)
  3161 +#     AC_DEFINE(HAVE_LOG10F)
  3162 +#     AC_DEFINE(HAVE_MODFF)
  3163 +#     AC_DEFINE(HAVE_SINF)
  3164 +#     AC_DEFINE(HAVE_SINHF)
  3165 +#     AC_DEFINE(HAVE_SINCOS)
  3166 +#     AC_DEFINE(HAVE_SINCOSF)
  3167 +    AC_DEFINE(HAVE_SQRTF)
  3168 +#     AC_DEFINE(HAVE_TANF)
  3169 +#     AC_DEFINE(HAVE_TANHF)
  3170 +    if test x"long_double_math_on_this_cpu" = x"yes"; then
  3171 +#       AC_DEFINE(HAVE_ACOSL)
  3172 +#       AC_DEFINE(HAVE_ASINL)
  3173 +#       AC_DEFINE(HAVE_ATANL)
  3174 +#       AC_DEFINE(HAVE_ATAN2L)
  3175 +#       AC_DEFINE(HAVE_CEILL)
  3176 +#       AC_DEFINE(HAVE_COPYSIGNL)
  3177 +#       AC_DEFINE(HAVE_COSL)
  3178 +#       AC_DEFINE(HAVE_COSHL)
  3179 +#       AC_DEFINE(HAVE_EXPL)
  3180 +#       AC_DEFINE(HAVE_FABSL)
  3181 +#       AC_DEFINE(HAVE_FINITEL)
  3182 +#       AC_DEFINE(HAVE_FLOORL)
  3183 +#       AC_DEFINE(HAVE_FMODL)
  3184 +#       AC_DEFINE(HAVE_FREXPL)
  3185 +#       AC_DEFINE(HAVE_HYPOTL)
  3186 +#       AC_DEFINE(HAVE_ISINFL)
  3187 +#       AC_DEFINE(HAVE_ISNANL)
  3188 +#       AC_DEFINE(HAVE_LOGL)
  3189 +#       AC_DEFINE(HAVE_LOG10L)
  3190 +#       AC_DEFINE(HAVE_MODFL)
  3191 +#       AC_DEFINE(HAVE_POWL)
  3192 +#       AC_DEFINE(HAVE_SINL)
  3193 +#       AC_DEFINE(HAVE_SINHL)
  3194 +#       AC_DEFINE(HAVE_SINCOSL)
  3195 +#       AC_DEFINE(HAVE_SQRTL)
  3196 +#       AC_DEFINE(HAVE_TANL)
  3197 +#       AC_DEFINE(HAVE_TANHL)
  3198 +    fi
  3199 +    ;;
  3200    *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu)
  3201      AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
  3202        machine/endian.h machine/param.h sys/machine.h sys/types.h \
  3203 @@ -156,7 +248,7 @@
  3204      AC_DEFINE(HAVE_INT64_T)
  3205      case "$target" in
  3206        *-uclinux*)
  3207 -        # Don't enable LFS with uClibc
  3208 +        # Don't enable LFS with uClinux
  3209          ;;
  3210        *)
  3211          AC_DEFINE(_GLIBCXX_USE_LFS)
  3212 diff -urN gcc-4.0.0-100/libstdc++-v3/include/c_compatibility/wchar.h gcc-4.0.0/libstdc++-v3/include/c_compatibility/wchar.h
  3213 --- gcc-4.0.0-100/libstdc++-v3/include/c_compatibility/wchar.h	2005-04-30 13:06:53.690054168 -0500
  3214 +++ gcc-4.0.0/libstdc++-v3/include/c_compatibility/wchar.h	2005-04-28 20:15:56.000000000 -0500
  3215 @@ -101,7 +101,9 @@
  3216  using std::wmemcpy;
  3217  using std::wmemmove;
  3218  using std::wmemset;
  3219 +#if _GLIBCXX_HAVE_WCSFTIME
  3220  using std::wcsftime;
  3221 +#endif
  3222  
  3223  #if _GLIBCXX_USE_C99
  3224  using std::wcstold;
  3225 diff -urN gcc-4.0.0-100/libstdc++-v3/include/c_std/std_cwchar.h gcc-4.0.0/libstdc++-v3/include/c_std/std_cwchar.h
  3226 --- gcc-4.0.0-100/libstdc++-v3/include/c_std/std_cwchar.h	2005-04-30 13:06:53.691054016 -0500
  3227 +++ gcc-4.0.0/libstdc++-v3/include/c_std/std_cwchar.h	2005-04-28 20:15:56.000000000 -0500
  3228 @@ -179,7 +179,9 @@
  3229    using ::wcscoll;
  3230    using ::wcscpy;
  3231    using ::wcscspn;
  3232 +#if _GLIBCXX_HAVE_WCSFTIME
  3233    using ::wcsftime;
  3234 +#endif
  3235    using ::wcslen;
  3236    using ::wcsncat;
  3237    using ::wcsncmp;