diff options
author | Nitin A Kamble <nitin.a.kamble@intel.com> | 2010-07-19 02:36:13 -0700 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2010-07-24 01:38:36 +0100 |
commit | c7c5c34188599bae19991f842a836fe125fa3283 (patch) | |
tree | 5e2e97d48c73cc9d0206a0d57bf2446b8dec8af1 /meta/packages/gcc/gcc-4.5.0/205-uclibc-locale-update.patch | |
parent | 722e27e44806558b2ef3e6b7072451981fa5823e (diff) | |
download | poky-c7c5c34188599bae19991f842a836fe125fa3283.tar.gz |
gcc family : upgrade to 4.5.0
Imported OE patches into the poky recipes.
- Use elfutils instead of libelf
Converted OE's svn source into tar ball & a patch.
Added a patch to revert the baseversion to 4.5.0
Merge OE & poky extra_oeconf_options
Fix the zlib (inside gcc) make issue by providing the --with-system-zlib switch in EXTRA_OECONF
Found out that some header file dirs were soft linked to non-existing
locations like c_std. Changed the configure options to point them to
existing locations like c_global.
gcc-cross-canadian_4.5.0: fix configure issue
Thanks to Saul Wold for providing poky gcc patches rebased to the 4.5.0
sources.
Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
Diffstat (limited to 'meta/packages/gcc/gcc-4.5.0/205-uclibc-locale-update.patch')
-rw-r--r-- | meta/packages/gcc/gcc-4.5.0/205-uclibc-locale-update.patch | 519 |
1 files changed, 519 insertions, 0 deletions
diff --git a/meta/packages/gcc/gcc-4.5.0/205-uclibc-locale-update.patch b/meta/packages/gcc/gcc-4.5.0/205-uclibc-locale-update.patch new file mode 100644 index 0000000000..48eaa1d442 --- /dev/null +++ b/meta/packages/gcc/gcc-4.5.0/205-uclibc-locale-update.patch | |||
@@ -0,0 +1,519 @@ | |||
1 | Index: gcc-4.3.2/libstdc++-v3/config/locale/uclibc/c_locale.cc | ||
2 | =================================================================== | ||
3 | --- gcc-4.3.2.orig/libstdc++-v3/config/locale/uclibc/c_locale.cc 2008-09-17 22:35:28.000000000 -0700 | ||
4 | +++ gcc-4.3.2/libstdc++-v3/config/locale/uclibc/c_locale.cc 2008-09-17 22:35:29.000000000 -0700 | ||
5 | @@ -39,23 +39,20 @@ | ||
6 | #include <langinfo.h> | ||
7 | #include <bits/c++locale_internal.h> | ||
8 | |||
9 | -namespace std | ||
10 | -{ | ||
11 | +_GLIBCXX_BEGIN_NAMESPACE(std) | ||
12 | + | ||
13 | template<> | ||
14 | void | ||
15 | __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, | ||
16 | const __c_locale& __cloc) | ||
17 | { | ||
18 | - if (!(__err & ios_base::failbit)) | ||
19 | - { | ||
20 | - char* __sanity; | ||
21 | - errno = 0; | ||
22 | - float __f = __strtof_l(__s, &__sanity, __cloc); | ||
23 | - if (__sanity != __s && errno != ERANGE) | ||
24 | - __v = __f; | ||
25 | - else | ||
26 | - __err |= ios_base::failbit; | ||
27 | - } | ||
28 | + char* __sanity; | ||
29 | + errno = 0; | ||
30 | + float __f = __strtof_l(__s, &__sanity, __cloc); | ||
31 | + if (__sanity != __s && errno != ERANGE) | ||
32 | + __v = __f; | ||
33 | + else | ||
34 | + __err |= ios_base::failbit; | ||
35 | } | ||
36 | |||
37 | template<> | ||
38 | @@ -63,16 +60,13 @@ | ||
39 | __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, | ||
40 | const __c_locale& __cloc) | ||
41 | { | ||
42 | - if (!(__err & ios_base::failbit)) | ||
43 | - { | ||
44 | - char* __sanity; | ||
45 | - errno = 0; | ||
46 | - double __d = __strtod_l(__s, &__sanity, __cloc); | ||
47 | - if (__sanity != __s && errno != ERANGE) | ||
48 | - __v = __d; | ||
49 | - else | ||
50 | - __err |= ios_base::failbit; | ||
51 | - } | ||
52 | + char* __sanity; | ||
53 | + errno = 0; | ||
54 | + double __d = __strtod_l(__s, &__sanity, __cloc); | ||
55 | + if (__sanity != __s && errno != ERANGE) | ||
56 | + __v = __d; | ||
57 | + else | ||
58 | + __err |= ios_base::failbit; | ||
59 | } | ||
60 | |||
61 | template<> | ||
62 | @@ -80,16 +74,13 @@ | ||
63 | __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err, | ||
64 | const __c_locale& __cloc) | ||
65 | { | ||
66 | - if (!(__err & ios_base::failbit)) | ||
67 | - { | ||
68 | - char* __sanity; | ||
69 | - errno = 0; | ||
70 | - long double __ld = __strtold_l(__s, &__sanity, __cloc); | ||
71 | - if (__sanity != __s && errno != ERANGE) | ||
72 | - __v = __ld; | ||
73 | - else | ||
74 | - __err |= ios_base::failbit; | ||
75 | - } | ||
76 | + char* __sanity; | ||
77 | + errno = 0; | ||
78 | + long double __ld = __strtold_l(__s, &__sanity, __cloc); | ||
79 | + if (__sanity != __s && errno != ERANGE) | ||
80 | + __v = __ld; | ||
81 | + else | ||
82 | + __err |= ios_base::failbit; | ||
83 | } | ||
84 | |||
85 | void | ||
86 | @@ -110,17 +101,18 @@ | ||
87 | void | ||
88 | locale::facet::_S_destroy_c_locale(__c_locale& __cloc) | ||
89 | { | ||
90 | - if (_S_get_c_locale() != __cloc) | ||
91 | + if (__cloc && _S_get_c_locale() != __cloc) | ||
92 | __freelocale(__cloc); | ||
93 | } | ||
94 | |||
95 | __c_locale | ||
96 | locale::facet::_S_clone_c_locale(__c_locale& __cloc) | ||
97 | { return __duplocale(__cloc); } | ||
98 | -} // namespace std | ||
99 | |||
100 | -namespace __gnu_cxx | ||
101 | -{ | ||
102 | +_GLIBCXX_END_NAMESPACE | ||
103 | + | ||
104 | +_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) | ||
105 | + | ||
106 | const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] = | ||
107 | { | ||
108 | "LC_CTYPE", | ||
109 | @@ -138,9 +130,11 @@ | ||
110 | "LC_IDENTIFICATION" | ||
111 | #endif | ||
112 | }; | ||
113 | -} | ||
114 | |||
115 | -namespace std | ||
116 | -{ | ||
117 | +_GLIBCXX_END_NAMESPACE | ||
118 | + | ||
119 | +_GLIBCXX_BEGIN_NAMESPACE(std) | ||
120 | + | ||
121 | const char* const* const locale::_S_categories = __gnu_cxx::category_names; | ||
122 | -} // namespace std | ||
123 | + | ||
124 | +_GLIBCXX_END_NAMESPACE | ||
125 | Index: gcc-4.3.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc | ||
126 | =================================================================== | ||
127 | --- gcc-4.3.2.orig/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2008-09-17 22:35:28.000000000 -0700 | ||
128 | +++ gcc-4.3.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2008-09-17 23:09:49.000000000 -0700 | ||
129 | @@ -33,16 +33,20 @@ | ||
130 | |||
131 | // Written by Benjamin Kosnik <bkoz@redhat.com> | ||
132 | |||
133 | +#include <features.h> | ||
134 | +#ifdef __UCLIBC_HAS_LOCALE__ | ||
135 | #define _LIBC | ||
136 | #include <locale> | ||
137 | #undef _LIBC | ||
138 | +#else | ||
139 | +#include <locale> | ||
140 | +#endif | ||
141 | #include <bits/c++locale_internal.h> | ||
142 | |||
143 | -namespace std | ||
144 | -{ | ||
145 | +_GLIBCXX_BEGIN_NAMESPACE(std) | ||
146 | + | ||
147 | // NB: The other ctype<char> specializations are in src/locale.cc and | ||
148 | // various /config/os/* files. | ||
149 | - template<> | ||
150 | ctype_byname<char>::ctype_byname(const char* __s, size_t __refs) | ||
151 | : ctype<char>(0, false, __refs) | ||
152 | { | ||
153 | @@ -57,6 +61,8 @@ | ||
154 | #endif | ||
155 | } | ||
156 | } | ||
157 | + ctype_byname<char>::~ctype_byname() | ||
158 | + { } | ||
159 | |||
160 | #ifdef _GLIBCXX_USE_WCHAR_T | ||
161 | ctype<wchar_t>::__wmask_type | ||
162 | @@ -138,17 +144,33 @@ | ||
163 | ctype<wchar_t>:: | ||
164 | do_is(mask __m, wchar_t __c) const | ||
165 | { | ||
166 | - // Highest bitmask in ctype_base == 10, but extra in "C" | ||
167 | - // library for blank. | ||
168 | + // The case of __m == ctype_base::space is particularly important, | ||
169 | + // due to its use in many istream functions. Therefore we deal with | ||
170 | + // it first, exploiting the knowledge that on GNU systems _M_bit[5] | ||
171 | + // is the mask corresponding to ctype_base::space. NB: an encoding | ||
172 | + // change would not affect correctness! | ||
173 | + | ||
174 | bool __ret = false; | ||
175 | - const size_t __bitmasksize = 11; | ||
176 | - for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur) | ||
177 | - if (__m & _M_bit[__bitcur] | ||
178 | - && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype)) | ||
179 | - { | ||
180 | - __ret = true; | ||
181 | - break; | ||
182 | - } | ||
183 | + if (__m == _M_bit[5]) | ||
184 | + __ret = __iswctype_l(__c, _M_wmask[5], _M_c_locale_ctype); | ||
185 | + else | ||
186 | + { | ||
187 | + // Highest bitmask in ctype_base == 10, but extra in "C" | ||
188 | + // library for blank. | ||
189 | + const size_t __bitmasksize = 11; | ||
190 | + for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur) | ||
191 | + if (__m & _M_bit[__bitcur]) | ||
192 | + { | ||
193 | + if (__iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype)) | ||
194 | + { | ||
195 | + __ret = true; | ||
196 | + break; | ||
197 | + } | ||
198 | + else if (__m == _M_bit[__bitcur]) | ||
199 | + break; | ||
200 | + } | ||
201 | + } | ||
202 | + | ||
203 | return __ret; | ||
204 | } | ||
205 | |||
206 | @@ -290,4 +312,5 @@ | ||
207 | #endif | ||
208 | } | ||
209 | #endif // _GLIBCXX_USE_WCHAR_T | ||
210 | -} | ||
211 | + | ||
212 | +_GLIBCXX_END_NAMESPACE | ||
213 | Index: gcc-4.3.2/libstdc++-v3/config/locale/uclibc/messages_members.h | ||
214 | =================================================================== | ||
215 | --- gcc-4.3.2.orig/libstdc++-v3/config/locale/uclibc/messages_members.h 2008-09-17 22:35:28.000000000 -0700 | ||
216 | +++ gcc-4.3.2/libstdc++-v3/config/locale/uclibc/messages_members.h 2008-09-17 23:13:34.000000000 -0700 | ||
217 | @@ -53,12 +53,16 @@ | ||
218 | template<typename _CharT> | ||
219 | messages<_CharT>::messages(__c_locale __cloc, const char* __s, | ||
220 | size_t __refs) | ||
221 | - : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)), | ||
222 | - _M_name_messages(__s) | ||
223 | + : facet(__refs), _M_c_locale_messages(NULL), | ||
224 | + _M_name_messages(NULL) | ||
225 | { | ||
226 | - char* __tmp = new char[std::strlen(__s) + 1]; | ||
227 | - std::strcpy(__tmp, __s); | ||
228 | + const size_t __len = std::strlen(__s) + 1; | ||
229 | + char* __tmp = new char[__len]; | ||
230 | + std::memcpy(__tmp, __s, __len); | ||
231 | _M_name_messages = __tmp; | ||
232 | + | ||
233 | + // Last to avoid leaking memory if new throws. | ||
234 | + _M_c_locale_messages = _S_clone_c_locale(__cloc); | ||
235 | } | ||
236 | |||
237 | template<typename _CharT> | ||
238 | Index: gcc-4.3.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc | ||
239 | =================================================================== | ||
240 | --- gcc-4.3.2.orig/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2008-09-17 22:35:28.000000000 -0700 | ||
241 | +++ gcc-4.3.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2008-09-17 22:35:29.000000000 -0700 | ||
242 | @@ -33,9 +33,14 @@ | ||
243 | |||
244 | // Written by Benjamin Kosnik <bkoz@redhat.com> | ||
245 | |||
246 | +#include <features.h> | ||
247 | +#ifdef __UCLIBC_HAS_LOCALE__ | ||
248 | #define _LIBC | ||
249 | #include <locale> | ||
250 | #undef _LIBC | ||
251 | +#else | ||
252 | +#include <locale> | ||
253 | +#endif | ||
254 | #include <bits/c++locale_internal.h> | ||
255 | |||
256 | #ifdef __UCLIBC_MJN3_ONLY__ | ||
257 | @@ -206,7 +211,7 @@ | ||
258 | } | ||
259 | break; | ||
260 | default: | ||
261 | - ; | ||
262 | + __ret = pattern(); | ||
263 | } | ||
264 | return __ret; | ||
265 | } | ||
266 | @@ -390,7 +395,9 @@ | ||
267 | __c_locale __old = __uselocale(__cloc); | ||
268 | #else | ||
269 | // Switch to named locale so that mbsrtowcs will work. | ||
270 | - char* __old = strdup(setlocale(LC_ALL, NULL)); | ||
271 | + char* __old = setlocale(LC_ALL, NULL); | ||
272 | + const size_t __llen = strlen(__old) + 1; | ||
273 | + char* __sav = new char[__llen]; | ||
274 | setlocale(LC_ALL, __name); | ||
275 | #endif | ||
276 | |||
277 | @@ -477,8 +484,8 @@ | ||
278 | #ifdef __UCLIBC_HAS_XLOCALE__ | ||
279 | __uselocale(__old); | ||
280 | #else | ||
281 | - setlocale(LC_ALL, __old); | ||
282 | - free(__old); | ||
283 | + setlocale(LC_ALL, __sav); | ||
284 | + delete [] __sav; | ||
285 | #endif | ||
286 | __throw_exception_again; | ||
287 | } | ||
288 | @@ -498,8 +505,8 @@ | ||
289 | #ifdef __UCLIBC_HAS_XLOCALE__ | ||
290 | __uselocale(__old); | ||
291 | #else | ||
292 | - setlocale(LC_ALL, __old); | ||
293 | - free(__old); | ||
294 | + setlocale(LC_ALL, __sav); | ||
295 | + delete [] __sav; | ||
296 | #endif | ||
297 | } | ||
298 | } | ||
299 | @@ -545,8 +552,11 @@ | ||
300 | __c_locale __old = __uselocale(__cloc); | ||
301 | #else | ||
302 | // Switch to named locale so that mbsrtowcs will work. | ||
303 | - char* __old = strdup(setlocale(LC_ALL, NULL)); | ||
304 | - setlocale(LC_ALL, __name); | ||
305 | + char* __old = setlocale(LC_ALL, NULL); | ||
306 | + const size_t __llen = strlen(__old) + 1; | ||
307 | + char* __sav = new char[__llen]; | ||
308 | + memcpy(__sav, __old, __llen); | ||
309 | + setlocale(LC_ALL, __name); | ||
310 | #endif | ||
311 | |||
312 | #ifdef __UCLIBC_MJN3_ONLY__ | ||
313 | @@ -633,8 +643,8 @@ | ||
314 | #ifdef __UCLIBC_HAS_XLOCALE__ | ||
315 | __uselocale(__old); | ||
316 | #else | ||
317 | - setlocale(LC_ALL, __old); | ||
318 | - free(__old); | ||
319 | + setlocale(LC_ALL, __sav); | ||
320 | + delete [] __sav; | ||
321 | #endif | ||
322 | __throw_exception_again; | ||
323 | } | ||
324 | @@ -653,8 +663,8 @@ | ||
325 | #ifdef __UCLIBC_HAS_XLOCALE__ | ||
326 | __uselocale(__old); | ||
327 | #else | ||
328 | - setlocale(LC_ALL, __old); | ||
329 | - free(__old); | ||
330 | + setlocale(LC_ALL, __sav); | ||
331 | + delete [] __sav; | ||
332 | #endif | ||
333 | } | ||
334 | } | ||
335 | Index: gcc-4.3.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc | ||
336 | =================================================================== | ||
337 | --- gcc-4.3.2.orig/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2008-09-17 22:35:28.000000000 -0700 | ||
338 | +++ gcc-4.3.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2008-09-17 22:35:29.000000000 -0700 | ||
339 | @@ -33,9 +33,14 @@ | ||
340 | |||
341 | // Written by Benjamin Kosnik <bkoz@redhat.com> | ||
342 | |||
343 | +#include <features.h> | ||
344 | +#ifdef __UCLIBC_HAS_LOCALE__ | ||
345 | #define _LIBC | ||
346 | #include <locale> | ||
347 | #undef _LIBC | ||
348 | +#else | ||
349 | +#include <locale> | ||
350 | +#endif | ||
351 | #include <bits/c++locale_internal.h> | ||
352 | |||
353 | #ifdef __UCLIBC_MJN3_ONLY__ | ||
354 | Index: gcc-4.3.2/libstdc++-v3/config/locale/uclibc/time_members.h | ||
355 | =================================================================== | ||
356 | --- gcc-4.3.2.orig/libstdc++-v3/config/locale/uclibc/time_members.h 2008-09-17 22:35:27.000000000 -0700 | ||
357 | +++ gcc-4.3.2/libstdc++-v3/config/locale/uclibc/time_members.h 2008-09-17 23:13:34.000000000 -0700 | ||
358 | @@ -50,12 +50,21 @@ | ||
359 | __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s, | ||
360 | size_t __refs) | ||
361 | : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), | ||
362 | - _M_name_timepunct(__s) | ||
363 | + _M_name_timepunct(NULL) | ||
364 | { | ||
365 | - char* __tmp = new char[std::strlen(__s) + 1]; | ||
366 | - std::strcpy(__tmp, __s); | ||
367 | + const size_t __len = std::strlen(__s) + 1; | ||
368 | + char* __tmp = new char[__len]; | ||
369 | + std::memcpy(__tmp, __s, __len); | ||
370 | _M_name_timepunct = __tmp; | ||
371 | - _M_initialize_timepunct(__cloc); | ||
372 | + | ||
373 | + try | ||
374 | + { _M_initialize_timepunct(__cloc); } | ||
375 | + catch(...) | ||
376 | + { | ||
377 | + delete [] _M_name_timepunct; | ||
378 | + __throw_exception_again; | ||
379 | + } | ||
380 | + | ||
381 | } | ||
382 | |||
383 | template<typename _CharT> | ||
384 | Index: gcc-4.3.2/libstdc++-v3/config/locale/uclibc/c_locale.h | ||
385 | =================================================================== | ||
386 | --- gcc-4.3.2.orig/libstdc++-v3/config/locale/uclibc/c_locale.h 2008-09-17 22:35:28.000000000 -0700 | ||
387 | +++ gcc-4.3.2/libstdc++-v3/config/locale/uclibc/c_locale.h 2008-09-17 22:35:29.000000000 -0700 | ||
388 | @@ -39,21 +39,23 @@ | ||
389 | #pragma GCC system_header | ||
390 | |||
391 | #include <cstring> // get std::strlen | ||
392 | -#include <cstdio> // get std::snprintf or std::sprintf | ||
393 | +#include <cstdio> // get std::vsnprintf or std::vsprintf | ||
394 | #include <clocale> | ||
395 | #include <langinfo.h> // For codecvt | ||
396 | #ifdef __UCLIBC_MJN3_ONLY__ | ||
397 | #warning fix this | ||
398 | #endif | ||
399 | -#ifdef __UCLIBC_HAS_LOCALE__ | ||
400 | +#ifdef _GLIBCXX_USE_ICONV | ||
401 | #include <iconv.h> // For codecvt using iconv, iconv_t | ||
402 | #endif | ||
403 | -#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__ | ||
404 | -#include <libintl.h> // For messages | ||
405 | +#ifdef HAVE_LIBINTL_H | ||
406 | +#include <libintl.h> // For messages | ||
407 | #endif | ||
408 | +#include <cstdarg> | ||
409 | |||
410 | #ifdef __UCLIBC_MJN3_ONLY__ | ||
411 | #warning what is _GLIBCXX_C_LOCALE_GNU for | ||
412 | +// psm: used in os/gnu-linux/ctype_noninline.h | ||
413 | #endif | ||
414 | #define _GLIBCXX_C_LOCALE_GNU 1 | ||
415 | |||
416 | @@ -78,23 +80,25 @@ | ||
417 | #else | ||
418 | typedef int* __c_locale; | ||
419 | #endif | ||
420 | - | ||
421 | - // Convert numeric value of type _Tv to string and return length of | ||
422 | - // string. If snprintf is available use it, otherwise fall back to | ||
423 | - // the unsafe sprintf which, in general, can be dangerous and should | ||
424 | + // Convert numeric value of type double to string and return length of | ||
425 | + // string. If vsnprintf is available use it, otherwise fall back to | ||
426 | + // the unsafe vsprintf which, in general, can be dangerous and should | ||
427 | // be avoided. | ||
428 | - template<typename _Tv> | ||
429 | - int | ||
430 | - __convert_from_v(char* __out, | ||
431 | - const int __size __attribute__ ((__unused__)), | ||
432 | - const char* __fmt, | ||
433 | -#ifdef __UCLIBC_HAS_XCLOCALE__ | ||
434 | - _Tv __v, const __c_locale& __cloc, int __prec) | ||
435 | + inline int | ||
436 | + __convert_from_v(const __c_locale& | ||
437 | +#ifndef __UCLIBC_HAS_XCLOCALE__ | ||
438 | + __cloc __attribute__ ((__unused__)) | ||
439 | +#endif | ||
440 | + , | ||
441 | + char* __out, | ||
442 | + const int __size, | ||
443 | + const char* __fmt, ...) | ||
444 | { | ||
445 | + va_list __args; | ||
446 | +#ifdef __UCLIBC_HAS_XCLOCALE__ | ||
447 | + | ||
448 | __c_locale __old = __gnu_cxx::__uselocale(__cloc); | ||
449 | #else | ||
450 | - _Tv __v, const __c_locale&, int __prec) | ||
451 | - { | ||
452 | # ifdef __UCLIBC_HAS_LOCALE__ | ||
453 | char* __old = std::setlocale(LC_ALL, NULL); | ||
454 | char* __sav = new char[std::strlen(__old) + 1]; | ||
455 | @@ -103,7 +107,9 @@ | ||
456 | # endif | ||
457 | #endif | ||
458 | |||
459 | - const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v); | ||
460 | + va_start(__args, __fmt); | ||
461 | + const int __ret = std::vsnprintf(__out, __size, __fmt, __args); | ||
462 | + va_end(__args); | ||
463 | |||
464 | #ifdef __UCLIBC_HAS_XCLOCALE__ | ||
465 | __gnu_cxx::__uselocale(__old); | ||
466 | Index: gcc-4.3.2/libstdc++-v3/config/locale/uclibc/time_members.cc | ||
467 | =================================================================== | ||
468 | --- gcc-4.3.2.orig/libstdc++-v3/config/locale/uclibc/time_members.cc 2008-09-17 22:35:28.000000000 -0700 | ||
469 | +++ gcc-4.3.2/libstdc++-v3/config/locale/uclibc/time_members.cc 2008-09-17 22:35:29.000000000 -0700 | ||
470 | @@ -53,11 +53,14 @@ | ||
471 | const size_t __len = __strftime_l(__s, __maxlen, __format, __tm, | ||
472 | _M_c_locale_timepunct); | ||
473 | #else | ||
474 | - char* __old = strdup(setlocale(LC_ALL, NULL)); | ||
475 | + char* __old = setlocale(LC_ALL, NULL); | ||
476 | + const size_t __llen = strlen(__old) + 1; | ||
477 | + char* __sav = new char[__llen]; | ||
478 | + memcpy(__sav, __old, __llen); | ||
479 | setlocale(LC_ALL, _M_name_timepunct); | ||
480 | const size_t __len = strftime(__s, __maxlen, __format, __tm); | ||
481 | - setlocale(LC_ALL, __old); | ||
482 | - free(__old); | ||
483 | + setlocale(LC_ALL, __sav); | ||
484 | + delete [] __sav; | ||
485 | #endif | ||
486 | // Make sure __s is null terminated. | ||
487 | if (__len == 0) | ||
488 | @@ -207,11 +210,14 @@ | ||
489 | const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm, | ||
490 | _M_c_locale_timepunct); | ||
491 | #else | ||
492 | - char* __old = strdup(setlocale(LC_ALL, NULL)); | ||
493 | + char* __old = setlocale(LC_ALL, NULL); | ||
494 | + const size_t __llen = strlen(__old) + 1; | ||
495 | + char* __sav = new char[__llen]; | ||
496 | + memcpy(__sav, __old, __llen); | ||
497 | setlocale(LC_ALL, _M_name_timepunct); | ||
498 | const size_t __len = wcsftime(__s, __maxlen, __format, __tm); | ||
499 | - setlocale(LC_ALL, __old); | ||
500 | - free(__old); | ||
501 | + setlocale(LC_ALL, __sav); | ||
502 | + delete [] __sav; | ||
503 | #endif | ||
504 | // Make sure __s is null terminated. | ||
505 | if (__len == 0) | ||
506 | Index: gcc-4.3.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h | ||
507 | =================================================================== | ||
508 | --- gcc-4.3.2.orig/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2008-09-17 22:35:28.000000000 -0700 | ||
509 | +++ gcc-4.3.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2008-09-17 22:35:29.000000000 -0700 | ||
510 | @@ -31,6 +31,9 @@ | ||
511 | |||
512 | #include <bits/c++config.h> | ||
513 | #include <clocale> | ||
514 | +#include <cstdlib> | ||
515 | +#include <cstring> | ||
516 | +#include <cstddef> | ||
517 | |||
518 | #ifdef __UCLIBC_MJN3_ONLY__ | ||
519 | #warning clean this up | ||