patches/gcc/4.2.0/150-uclibc-locale-update.patch
author "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
Mon Apr 16 15:25:36 2012 +0200 (2012-04-16)
changeset 2941 13e40098fffc
parent 111 2e16b9fc302d
permissions -rw-r--r--
cc/gcc: update Linaro GCC revisions to 2012.04

Update Linaro GCC with the latest available revisions.

The 4.7 revision is also released, but the infrastructure is not yet ready for
it in CT-NG.

Signed-off-by: "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
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);