yann@111
|
1 |
--- gcc/libstdc++-v3/config/locale/uclibc/c_locale.cc.uclibc200_update~ 2006-03-10 15:32:37 +0100
|
yann@111
|
2 |
+++ gcc/libstdc++-v3/config/locale/uclibc/c_locale.cc 2006-03-10 15:39:14 +0100
|
yann@111
|
3 |
@@ -46,16 +47,13 @@
|
yann@111
|
4 |
__convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
|
yann@111
|
5 |
const __c_locale& __cloc)
|
yann@111
|
6 |
{
|
yann@111
|
7 |
- if (!(__err & ios_base::failbit))
|
yann@111
|
8 |
- {
|
yann@111
|
9 |
- char* __sanity;
|
yann@111
|
10 |
- errno = 0;
|
yann@111
|
11 |
- float __f = __strtof_l(__s, &__sanity, __cloc);
|
yann@111
|
12 |
- if (__sanity != __s && errno != ERANGE)
|
yann@111
|
13 |
- __v = __f;
|
yann@111
|
14 |
- else
|
yann@111
|
15 |
- __err |= ios_base::failbit;
|
yann@111
|
16 |
- }
|
yann@111
|
17 |
+ char* __sanity;
|
yann@111
|
18 |
+ errno = 0;
|
yann@111
|
19 |
+ float __f = __strtof_l(__s, &__sanity, __cloc);
|
yann@111
|
20 |
+ if (__sanity != __s && errno != ERANGE)
|
yann@111
|
21 |
+ __v = __f;
|
yann@111
|
22 |
+ else
|
yann@111
|
23 |
+ __err |= ios_base::failbit;
|
yann@111
|
24 |
}
|
yann@111
|
25 |
|
yann@111
|
26 |
template<>
|
yann@111
|
27 |
@@ -63,16 +61,13 @@
|
yann@111
|
28 |
__convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
|
yann@111
|
29 |
const __c_locale& __cloc)
|
yann@111
|
30 |
{
|
yann@111
|
31 |
- if (!(__err & ios_base::failbit))
|
yann@111
|
32 |
- {
|
yann@111
|
33 |
- char* __sanity;
|
yann@111
|
34 |
- errno = 0;
|
yann@111
|
35 |
- double __d = __strtod_l(__s, &__sanity, __cloc);
|
yann@111
|
36 |
- if (__sanity != __s && errno != ERANGE)
|
yann@111
|
37 |
- __v = __d;
|
yann@111
|
38 |
- else
|
yann@111
|
39 |
- __err |= ios_base::failbit;
|
yann@111
|
40 |
- }
|
yann@111
|
41 |
+ char* __sanity;
|
yann@111
|
42 |
+ errno = 0;
|
yann@111
|
43 |
+ double __d = __strtod_l(__s, &__sanity, __cloc);
|
yann@111
|
44 |
+ if (__sanity != __s && errno != ERANGE)
|
yann@111
|
45 |
+ __v = __d;
|
yann@111
|
46 |
+ else
|
yann@111
|
47 |
+ __err |= ios_base::failbit;
|
yann@111
|
48 |
}
|
yann@111
|
49 |
|
yann@111
|
50 |
template<>
|
yann@111
|
51 |
@@ -80,16 +75,13 @@
|
yann@111
|
52 |
__convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
|
yann@111
|
53 |
const __c_locale& __cloc)
|
yann@111
|
54 |
{
|
yann@111
|
55 |
- if (!(__err & ios_base::failbit))
|
yann@111
|
56 |
- {
|
yann@111
|
57 |
- char* __sanity;
|
yann@111
|
58 |
- errno = 0;
|
yann@111
|
59 |
- long double __ld = __strtold_l(__s, &__sanity, __cloc);
|
yann@111
|
60 |
- if (__sanity != __s && errno != ERANGE)
|
yann@111
|
61 |
- __v = __ld;
|
yann@111
|
62 |
- else
|
yann@111
|
63 |
- __err |= ios_base::failbit;
|
yann@111
|
64 |
- }
|
yann@111
|
65 |
+ char* __sanity;
|
yann@111
|
66 |
+ errno = 0;
|
yann@111
|
67 |
+ long double __ld = __strtold_l(__s, &__sanity, __cloc);
|
yann@111
|
68 |
+ if (__sanity != __s && errno != ERANGE)
|
yann@111
|
69 |
+ __v = __ld;
|
yann@111
|
70 |
+ else
|
yann@111
|
71 |
+ __err |= ios_base::failbit;
|
yann@111
|
72 |
}
|
yann@111
|
73 |
|
yann@111
|
74 |
void
|
yann@111
|
75 |
@@ -110,7 +102,7 @@
|
yann@111
|
76 |
void
|
yann@111
|
77 |
locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
|
yann@111
|
78 |
{
|
yann@111
|
79 |
- if (_S_get_c_locale() != __cloc)
|
yann@111
|
80 |
+ if (__cloc && _S_get_c_locale() != __cloc)
|
yann@111
|
81 |
__freelocale(__cloc);
|
yann@111
|
82 |
}
|
yann@111
|
83 |
|
yann@111
|
84 |
--- gcc/libstdc++-v3/config/locale/uclibc/ctype_members.cc.uclibc200_update~ 2006-03-10 15:32:37 +0100
|
yann@111
|
85 |
+++ gcc/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2006-03-10 15:39:14 +0100
|
yann@111
|
86 |
@@ -33,9 +33,14 @@
|
yann@111
|
87 |
|
yann@111
|
88 |
// Written by Benjamin Kosnik <bkoz@redhat.com>
|
yann@111
|
89 |
|
yann@111
|
90 |
+#include <features.h>
|
yann@111
|
91 |
+#ifdef __UCLIBC_HAS_LOCALE__
|
yann@111
|
92 |
#define _LIBC
|
yann@111
|
93 |
#include <locale>
|
yann@111
|
94 |
#undef _LIBC
|
yann@111
|
95 |
+#else
|
yann@111
|
96 |
+#include <locale>
|
yann@111
|
97 |
+#endif
|
yann@111
|
98 |
#include <bits/c++locale_internal.h>
|
yann@111
|
99 |
|
yann@111
|
100 |
namespace std
|
yann@111
|
101 |
@@ -138,20 +143,34 @@
|
yann@111
|
102 |
ctype<wchar_t>::
|
yann@111
|
103 |
do_is(mask __m, wchar_t __c) const
|
yann@111
|
104 |
{
|
yann@111
|
105 |
- // Highest bitmask in ctype_base == 10, but extra in "C"
|
yann@111
|
106 |
- // library for blank.
|
yann@111
|
107 |
+ // The case of __m == ctype_base::space is particularly important,
|
yann@111
|
108 |
+ // due to its use in many istream functions. Therefore we deal with
|
yann@111
|
109 |
+ // it first, exploiting the knowledge that on GNU systems _M_bit[5]
|
yann@111
|
110 |
+ // is the mask corresponding to ctype_base::space. NB: an encoding
|
yann@111
|
111 |
+ // change would not affect correctness!
|
yann@111
|
112 |
bool __ret = false;
|
yann@111
|
113 |
- const size_t __bitmasksize = 11;
|
yann@111
|
114 |
- for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
|
yann@111
|
115 |
- if (__m & _M_bit[__bitcur]
|
yann@111
|
116 |
- && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
|
yann@111
|
117 |
- {
|
yann@111
|
118 |
- __ret = true;
|
yann@111
|
119 |
- break;
|
yann@111
|
120 |
- }
|
yann@111
|
121 |
+ if (__m == _M_bit[5])
|
yann@111
|
122 |
+ __ret = __iswctype_l(__c, _M_wmask[5], _M_c_locale_ctype);
|
yann@111
|
123 |
+ else
|
yann@111
|
124 |
+ {
|
yann@111
|
125 |
+ // Highest bitmask in ctype_base == 10, but extra in "C"
|
yann@111
|
126 |
+ // library for blank.
|
yann@111
|
127 |
+ const size_t __bitmasksize = 11;
|
yann@111
|
128 |
+ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
|
yann@111
|
129 |
+ if (__m & _M_bit[__bitcur])
|
yann@111
|
130 |
+ {
|
yann@111
|
131 |
+ if (__iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
|
yann@111
|
132 |
+ {
|
yann@111
|
133 |
+ __ret = true;
|
yann@111
|
134 |
+ break;
|
yann@111
|
135 |
+ }
|
yann@111
|
136 |
+ else if (__m == _M_bit[__bitcur])
|
yann@111
|
137 |
+ break;
|
yann@111
|
138 |
+ }
|
yann@111
|
139 |
+ }
|
yann@111
|
140 |
return __ret;
|
yann@111
|
141 |
}
|
yann@111
|
142 |
-
|
yann@111
|
143 |
+
|
yann@111
|
144 |
const wchar_t*
|
yann@111
|
145 |
ctype<wchar_t>::
|
yann@111
|
146 |
do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
|
yann@111
|
147 |
--- gcc/libstdc++-v3/config/locale/uclibc/messages_members.h.uclibc200_update~ 2006-03-10 15:32:37 +0100
|
yann@111
|
148 |
+++ gcc/libstdc++-v3/config/locale/uclibc/messages_members.h 2006-03-10 15:39:14 +0100
|
yann@111
|
149 |
@@ -47,18 +47,21 @@
|
yann@111
|
150 |
template<typename _CharT>
|
yann@111
|
151 |
messages<_CharT>::messages(size_t __refs)
|
yann@111
|
152 |
: facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
|
yann@111
|
153 |
- _M_name_messages(_S_get_c_name())
|
yann@111
|
154 |
+ _M_name_messages(_S_get_c_name())
|
yann@111
|
155 |
{ }
|
yann@111
|
156 |
|
yann@111
|
157 |
template<typename _CharT>
|
yann@111
|
158 |
messages<_CharT>::messages(__c_locale __cloc, const char* __s,
|
yann@111
|
159 |
size_t __refs)
|
yann@111
|
160 |
- : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
|
yann@111
|
161 |
- _M_name_messages(__s)
|
yann@111
|
162 |
+ : facet(__refs), _M_c_locale_messages(NULL), _M_name_messages(NULL)
|
yann@111
|
163 |
{
|
yann@111
|
164 |
- char* __tmp = new char[std::strlen(__s) + 1];
|
yann@111
|
165 |
- std::strcpy(__tmp, __s);
|
yann@111
|
166 |
+ const size_t __len = std::strlen(__s) + 1;
|
yann@111
|
167 |
+ char* __tmp = new char[__len];
|
yann@111
|
168 |
+ std::memcpy(__tmp, __s, __len);
|
yann@111
|
169 |
_M_name_messages = __tmp;
|
yann@111
|
170 |
+
|
yann@111
|
171 |
+ // Last to avoid leaking memory if new throws.
|
yann@111
|
172 |
+ _M_c_locale_messages = _S_clone_c_locale(__cloc);
|
yann@111
|
173 |
}
|
yann@111
|
174 |
|
yann@111
|
175 |
template<typename _CharT>
|
yann@111
|
176 |
--- gcc/libstdc++-v3/config/locale/uclibc/monetary_members.cc.uclibc200_update~ 2006-03-10 15:37:27 +0100
|
yann@111
|
177 |
+++ gcc/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2006-03-10 15:39:14 +0100
|
yann@111
|
178 |
@@ -33,9 +33,14 @@
|
yann@111
|
179 |
|
yann@111
|
180 |
// Written by Benjamin Kosnik <bkoz@redhat.com>
|
yann@111
|
181 |
|
yann@111
|
182 |
+#include <features.h>
|
yann@111
|
183 |
+#ifdef __UCLIBC_HAS_LOCALE__
|
yann@111
|
184 |
#define _LIBC
|
yann@111
|
185 |
#include <locale>
|
yann@111
|
186 |
#undef _LIBC
|
yann@111
|
187 |
+#else
|
yann@111
|
188 |
+#include <locale>
|
yann@111
|
189 |
+#endif
|
yann@111
|
190 |
#include <bits/c++locale_internal.h>
|
yann@111
|
191 |
|
yann@111
|
192 |
#ifdef __UCLIBC_MJN3_ONLY__
|
yann@111
|
193 |
@@ -206,7 +211,7 @@
|
yann@111
|
194 |
}
|
yann@111
|
195 |
break;
|
yann@111
|
196 |
default:
|
yann@111
|
197 |
- ;
|
yann@111
|
198 |
+ __ret = pattern();
|
yann@111
|
199 |
}
|
yann@111
|
200 |
return __ret;
|
yann@111
|
201 |
}
|
yann@111
|
202 |
--- gcc/libstdc++-v3/config/locale/uclibc/numeric_members.cc.uclibc200_update~ 2006-03-10 15:37:27 +0100
|
yann@111
|
203 |
+++ gcc/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2006-03-10 15:39:14 +0100
|
yann@111
|
204 |
@@ -33,9 +33,14 @@
|
yann@111
|
205 |
|
yann@111
|
206 |
// Written by Benjamin Kosnik <bkoz@redhat.com>
|
yann@111
|
207 |
|
yann@111
|
208 |
+#include <features.h>
|
yann@111
|
209 |
+#ifdef __UCLIBC_HAS_LOCALE__
|
yann@111
|
210 |
#define _LIBC
|
yann@111
|
211 |
#include <locale>
|
yann@111
|
212 |
#undef _LIBC
|
yann@111
|
213 |
+#else
|
yann@111
|
214 |
+#include <locale>
|
yann@111
|
215 |
+#endif
|
yann@111
|
216 |
#include <bits/c++locale_internal.h>
|
yann@111
|
217 |
|
yann@111
|
218 |
#ifdef __UCLIBC_MJN3_ONLY__
|
yann@111
|
219 |
--- gcc/libstdc++-v3/config/locale/uclibc/time_members.h.uclibc200_update~ 2006-03-10 15:06:17 +0100
|
yann@111
|
220 |
+++ gcc/libstdc++-v3/config/locale/uclibc/time_members.h 2006-03-10 15:39:14 +0100
|
yann@111
|
221 |
@@ -37,25 +37,33 @@
|
yann@111
|
222 |
template<typename _CharT>
|
yann@111
|
223 |
__timepunct<_CharT>::__timepunct(size_t __refs)
|
yann@111
|
224 |
: facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
|
yann@111
|
225 |
- _M_name_timepunct(_S_get_c_name())
|
yann@111
|
226 |
+ _M_name_timepunct(_S_get_c_name())
|
yann@111
|
227 |
{ _M_initialize_timepunct(); }
|
yann@111
|
228 |
|
yann@111
|
229 |
template<typename _CharT>
|
yann@111
|
230 |
__timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
|
yann@111
|
231 |
: facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL),
|
yann@111
|
232 |
- _M_name_timepunct(_S_get_c_name())
|
yann@111
|
233 |
+ _M_name_timepunct(_S_get_c_name())
|
yann@111
|
234 |
{ _M_initialize_timepunct(); }
|
yann@111
|
235 |
|
yann@111
|
236 |
template<typename _CharT>
|
yann@111
|
237 |
__timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
|
yann@111
|
238 |
size_t __refs)
|
yann@111
|
239 |
: facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
|
yann@111
|
240 |
- _M_name_timepunct(__s)
|
yann@111
|
241 |
+ _M_name_timepunct(NULL)
|
yann@111
|
242 |
{
|
yann@111
|
243 |
- char* __tmp = new char[std::strlen(__s) + 1];
|
yann@111
|
244 |
- std::strcpy(__tmp, __s);
|
yann@111
|
245 |
+ const size_t __len = std::strlen(__s) + 1;
|
yann@111
|
246 |
+ char* __tmp = new char[__len];
|
yann@111
|
247 |
+ std::memcpy(__tmp, __s, __len);
|
yann@111
|
248 |
_M_name_timepunct = __tmp;
|
yann@111
|
249 |
- _M_initialize_timepunct(__cloc);
|
yann@111
|
250 |
+
|
yann@111
|
251 |
+ try
|
yann@111
|
252 |
+ { _M_initialize_timepunct(__cloc); }
|
yann@111
|
253 |
+ catch(...)
|
yann@111
|
254 |
+ {
|
yann@111
|
255 |
+ delete [] _M_name_timepunct;
|
yann@111
|
256 |
+ __throw_exception_again;
|
yann@111
|
257 |
+ }
|
yann@111
|
258 |
}
|
yann@111
|
259 |
|
yann@111
|
260 |
template<typename _CharT>
|
yann@111
|
261 |
--- gcc-4.2/libstdc++-v3/config/locale/uclibc/c_locale.h.old 2006-09-28 11:39:00.000000000 +0200
|
yann@111
|
262 |
+++ gcc-4.2/libstdc++-v3/config/locale/uclibc/c_locale.h 2006-09-28 12:10:41.000000000 +0200
|
yann@111
|
263 |
@@ -39,21 +39,23 @@
|
yann@111
|
264 |
#pragma GCC system_header
|
yann@111
|
265 |
|
yann@111
|
266 |
#include <cstring> // get std::strlen
|
yann@111
|
267 |
-#include <cstdio> // get std::snprintf or std::sprintf
|
yann@111
|
268 |
+#include <cstdio> // get std::vsnprintf or std::vsprintf
|
yann@111
|
269 |
#include <clocale>
|
yann@111
|
270 |
#include <langinfo.h> // For codecvt
|
yann@111
|
271 |
#ifdef __UCLIBC_MJN3_ONLY__
|
yann@111
|
272 |
#warning fix this
|
yann@111
|
273 |
#endif
|
yann@111
|
274 |
-#ifdef __UCLIBC_HAS_LOCALE__
|
yann@111
|
275 |
+#ifdef _GLIBCXX_USE_ICONV
|
yann@111
|
276 |
#include <iconv.h> // For codecvt using iconv, iconv_t
|
yann@111
|
277 |
#endif
|
yann@111
|
278 |
-#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
|
yann@111
|
279 |
-#include <libintl.h> // For messages
|
yann@111
|
280 |
+#ifdef HAVE_LIBINTL_H
|
yann@111
|
281 |
+#include <libintl.h> // For messages
|
yann@111
|
282 |
#endif
|
yann@111
|
283 |
+#include <cstdarg>
|
yann@111
|
284 |
|
yann@111
|
285 |
#ifdef __UCLIBC_MJN3_ONLY__
|
yann@111
|
286 |
#warning what is _GLIBCXX_C_LOCALE_GNU for
|
yann@111
|
287 |
+// psm: used in os/gnu-linux/ctype_noninline.h
|
yann@111
|
288 |
#endif
|
yann@111
|
289 |
#define _GLIBCXX_C_LOCALE_GNU 1
|
yann@111
|
290 |
|
yann@111
|
291 |
@@ -62,7 +64,7 @@
|
yann@111
|
292 |
#endif
|
yann@111
|
293 |
// #define _GLIBCXX_NUM_CATEGORIES 6
|
yann@111
|
294 |
#define _GLIBCXX_NUM_CATEGORIES 0
|
yann@111
|
295 |
-
|
yann@111
|
296 |
+
|
yann@111
|
297 |
#ifdef __UCLIBC_HAS_XLOCALE__
|
yann@111
|
298 |
namespace __gnu_cxx
|
yann@111
|
299 |
{
|
yann@111
|
300 |
@@ -79,22 +81,24 @@
|
yann@111
|
301 |
typedef int* __c_locale;
|
yann@111
|
302 |
#endif
|
yann@111
|
303 |
|
yann@111
|
304 |
- // Convert numeric value of type _Tv to string and return length of
|
yann@111
|
305 |
- // string. If snprintf is available use it, otherwise fall back to
|
yann@111
|
306 |
- // the unsafe sprintf which, in general, can be dangerous and should
|
yann@111
|
307 |
+ // Convert numeric value of type double to string and return length of
|
yann@111
|
308 |
+ // string. If vsnprintf is available use it, otherwise fall back to
|
yann@111
|
309 |
+ // the unsafe vsprintf which, in general, can be dangerous and should
|
yann@111
|
310 |
// be avoided.
|
yann@111
|
311 |
- template<typename _Tv>
|
yann@111
|
312 |
- int
|
yann@111
|
313 |
- __convert_from_v(char* __out,
|
yann@111
|
314 |
- const int __size __attribute__ ((__unused__)),
|
yann@111
|
315 |
- const char* __fmt,
|
yann@111
|
316 |
-#ifdef __UCLIBC_HAS_XCLOCALE__
|
yann@111
|
317 |
- _Tv __v, const __c_locale& __cloc, int __prec)
|
yann@111
|
318 |
+ inline int
|
yann@111
|
319 |
+ __convert_from_v(const __c_locale&
|
yann@111
|
320 |
+#ifndef __UCLIBC_HAS_XCLOCALE__
|
yann@111
|
321 |
+ __cloc __attribute__ ((__unused__))
|
yann@111
|
322 |
+#endif
|
yann@111
|
323 |
+ ,
|
yann@111
|
324 |
+ char* __out,
|
yann@111
|
325 |
+ const int __size,
|
yann@111
|
326 |
+ const char* __fmt, ...)
|
yann@111
|
327 |
{
|
yann@111
|
328 |
+ va_list __args;
|
yann@111
|
329 |
+#ifdef __UCLIBC_HAS_XCLOCALE__
|
yann@111
|
330 |
__c_locale __old = __gnu_cxx::__uselocale(__cloc);
|
yann@111
|
331 |
#else
|
yann@111
|
332 |
- _Tv __v, const __c_locale&, int __prec)
|
yann@111
|
333 |
- {
|
yann@111
|
334 |
# ifdef __UCLIBC_HAS_LOCALE__
|
yann@111
|
335 |
char* __old = std::setlocale(LC_ALL, NULL);
|
yann@111
|
336 |
char* __sav = new char[std::strlen(__old) + 1];
|
yann@111
|
337 |
@@ -103,7 +107,9 @@
|
yann@111
|
338 |
# endif
|
yann@111
|
339 |
#endif
|
yann@111
|
340 |
|
yann@111
|
341 |
- const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
|
yann@111
|
342 |
+ va_start(__args, __fmt);
|
yann@111
|
343 |
+ const int __ret = std::vsnprintf(__out, __size, __fmt, __args);
|
yann@111
|
344 |
+ va_end(__args);
|
yann@111
|
345 |
|
yann@111
|
346 |
#ifdef __UCLIBC_HAS_XCLOCALE__
|
yann@111
|
347 |
__gnu_cxx::__uselocale(__old);
|