patches/gcc/4.0.4/110-uclibc-locale.patch
author Arnaud Lacombe <lacombar@gmail.com>
Tue Aug 03 06:17:51 2010 +0200 (2010-08-03)
changeset 2064 f5ebe8c429dc
parent 1 eeea35fbf182
permissions -rw-r--r--
libc/uClibc: add uClibc 0.9.30.3

This version has been released a couple of month ago, but it never reached
crosstool-ng tree. This may be linked to the fact that the current 0.9.30.2,
once patched, has nothing much different from 0.9.30.3, released.

I'm not including any patch with this upgrade, on purpose.

Signed-off-by: Arnaud Lacombe <lacombar@gmail.com>
     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;