patches/gcc/3.4.6/110-uclibc-locale.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue Jan 12 19:24:03 2010 +0100 (2010-01-12)
changeset 1761 88020b2c3246
parent 339 bd5e0a849352
permissions -rw-r--r--
scripts/functions: change handling of nochdir

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