Root/toolchain/gcc/patches/4.2.4/200-uclibc-locale.patch

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

Archive Download this file



interactive