patches/gcc/4.1.2/120-uclibc-locale.patch
author "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
Mon Apr 16 15:25:36 2012 +0200 (2012-04-16)
changeset 2941 13e40098fffc
parent 13 068dce39f687
permissions -rw-r--r--
cc/gcc: update Linaro GCC revisions to 2012.04

Update Linaro GCC with the latest available revisions.

The 4.7 revision is also released, but the infrastructure is not yet ready for
it in CT-NG.

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