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