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