123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 |
- --- gcc/libstdc++-v3/config/locale/uclibc/c_locale.cc.uclibc200_update~ 2006-03-10 15:32:37 +0100
- +++ gcc/libstdc++-v3/config/locale/uclibc/c_locale.cc 2006-03-10 15:39:14 +0100
- @@ -46,16 +47,13 @@
- __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
- const __c_locale& __cloc)
- {
- - if (!(__err & ios_base::failbit))
- - {
- - char* __sanity;
- - errno = 0;
- - float __f = __strtof_l(__s, &__sanity, __cloc);
- - if (__sanity != __s && errno != ERANGE)
- - __v = __f;
- - else
- - __err |= ios_base::failbit;
- - }
- + char* __sanity;
- + errno = 0;
- + float __f = __strtof_l(__s, &__sanity, __cloc);
- + if (__sanity != __s && errno != ERANGE)
- + __v = __f;
- + else
- + __err |= ios_base::failbit;
- }
-
- template<>
- @@ -63,16 +61,13 @@
- __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
- const __c_locale& __cloc)
- {
- - if (!(__err & ios_base::failbit))
- - {
- - char* __sanity;
- - errno = 0;
- - double __d = __strtod_l(__s, &__sanity, __cloc);
- - if (__sanity != __s && errno != ERANGE)
- - __v = __d;
- - else
- - __err |= ios_base::failbit;
- - }
- + char* __sanity;
- + errno = 0;
- + double __d = __strtod_l(__s, &__sanity, __cloc);
- + if (__sanity != __s && errno != ERANGE)
- + __v = __d;
- + else
- + __err |= ios_base::failbit;
- }
-
- template<>
- @@ -80,16 +75,13 @@
- __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
- const __c_locale& __cloc)
- {
- - if (!(__err & ios_base::failbit))
- - {
- - char* __sanity;
- - errno = 0;
- - long double __ld = __strtold_l(__s, &__sanity, __cloc);
- - if (__sanity != __s && errno != ERANGE)
- - __v = __ld;
- - else
- - __err |= ios_base::failbit;
- - }
- + char* __sanity;
- + errno = 0;
- + long double __ld = __strtold_l(__s, &__sanity, __cloc);
- + if (__sanity != __s && errno != ERANGE)
- + __v = __ld;
- + else
- + __err |= ios_base::failbit;
- }
-
- void
- @@ -110,7 +102,7 @@
- void
- locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
- {
- - if (_S_get_c_locale() != __cloc)
- + if (__cloc && _S_get_c_locale() != __cloc)
- __freelocale(__cloc);
- }
-
- --- gcc/libstdc++-v3/config/locale/uclibc/ctype_members.cc.uclibc200_update~ 2006-03-10 15:32:37 +0100
- +++ gcc/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2006-03-10 15:39:14 +0100
- @@ -33,9 +33,14 @@
-
- // Written by Benjamin Kosnik <bkoz@redhat.com>
-
- +#include <features.h>
- +#ifdef __UCLIBC_HAS_LOCALE__
- #define _LIBC
- #include <locale>
- #undef _LIBC
- +#else
- +#include <locale>
- +#endif
- #include <bits/c++locale_internal.h>
-
- namespace std
- @@ -138,20 +143,34 @@
- ctype<wchar_t>::
- do_is(mask __m, wchar_t __c) const
- {
- - // Highest bitmask in ctype_base == 10, but extra in "C"
- - // library for blank.
- + // The case of __m == ctype_base::space is particularly important,
- + // due to its use in many istream functions. Therefore we deal with
- + // it first, exploiting the knowledge that on GNU systems _M_bit[5]
- + // is the mask corresponding to ctype_base::space. NB: an encoding
- + // change would not affect correctness!
- bool __ret = false;
- - const size_t __bitmasksize = 11;
- - for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
- - if (__m & _M_bit[__bitcur]
- - && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
- - {
- - __ret = true;
- - break;
- - }
- + if (__m == _M_bit[5])
- + __ret = __iswctype_l(__c, _M_wmask[5], _M_c_locale_ctype);
- + else
- + {
- + // Highest bitmask in ctype_base == 10, but extra in "C"
- + // library for blank.
- + const size_t __bitmasksize = 11;
- + for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
- + if (__m & _M_bit[__bitcur])
- + {
- + if (__iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
- + {
- + __ret = true;
- + break;
- + }
- + else if (__m == _M_bit[__bitcur])
- + break;
- + }
- + }
- return __ret;
- }
- -
- +
- const wchar_t*
- ctype<wchar_t>::
- do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
- --- gcc/libstdc++-v3/config/locale/uclibc/messages_members.h.uclibc200_update~ 2006-03-10 15:32:37 +0100
- +++ gcc/libstdc++-v3/config/locale/uclibc/messages_members.h 2006-03-10 15:39:14 +0100
- @@ -47,18 +47,21 @@
- template<typename _CharT>
- messages<_CharT>::messages(size_t __refs)
- : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
- - _M_name_messages(_S_get_c_name())
- + _M_name_messages(_S_get_c_name())
- { }
-
- template<typename _CharT>
- messages<_CharT>::messages(__c_locale __cloc, const char* __s,
- size_t __refs)
- - : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
- - _M_name_messages(__s)
- + : facet(__refs), _M_c_locale_messages(NULL), _M_name_messages(NULL)
- {
- - char* __tmp = new char[std::strlen(__s) + 1];
- - std::strcpy(__tmp, __s);
- + const size_t __len = std::strlen(__s) + 1;
- + char* __tmp = new char[__len];
- + std::memcpy(__tmp, __s, __len);
- _M_name_messages = __tmp;
- +
- + // Last to avoid leaking memory if new throws.
- + _M_c_locale_messages = _S_clone_c_locale(__cloc);
- }
-
- template<typename _CharT>
- --- gcc/libstdc++-v3/config/locale/uclibc/monetary_members.cc.uclibc200_update~ 2006-03-10 15:37:27 +0100
- +++ gcc/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2006-03-10 15:39:14 +0100
- @@ -33,9 +33,14 @@
-
- // Written by Benjamin Kosnik <bkoz@redhat.com>
-
- +#include <features.h>
- +#ifdef __UCLIBC_HAS_LOCALE__
- #define _LIBC
- #include <locale>
- #undef _LIBC
- +#else
- +#include <locale>
- +#endif
- #include <bits/c++locale_internal.h>
-
- #ifdef __UCLIBC_MJN3_ONLY__
- @@ -206,7 +211,7 @@
- }
- break;
- default:
- - ;
- + __ret = pattern();
- }
- return __ret;
- }
- --- gcc/libstdc++-v3/config/locale/uclibc/numeric_members.cc.uclibc200_update~ 2006-03-10 15:37:27 +0100
- +++ gcc/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2006-03-10 15:39:14 +0100
- @@ -33,9 +33,14 @@
-
- // Written by Benjamin Kosnik <bkoz@redhat.com>
-
- +#include <features.h>
- +#ifdef __UCLIBC_HAS_LOCALE__
- #define _LIBC
- #include <locale>
- #undef _LIBC
- +#else
- +#include <locale>
- +#endif
- #include <bits/c++locale_internal.h>
-
- #ifdef __UCLIBC_MJN3_ONLY__
- --- gcc/libstdc++-v3/config/locale/uclibc/time_members.h.uclibc200_update~ 2006-03-10 15:06:17 +0100
- +++ gcc/libstdc++-v3/config/locale/uclibc/time_members.h 2006-03-10 15:39:14 +0100
- @@ -37,25 +37,33 @@
- template<typename _CharT>
- __timepunct<_CharT>::__timepunct(size_t __refs)
- : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
- - _M_name_timepunct(_S_get_c_name())
- + _M_name_timepunct(_S_get_c_name())
- { _M_initialize_timepunct(); }
-
- template<typename _CharT>
- __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
- : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL),
- - _M_name_timepunct(_S_get_c_name())
- + _M_name_timepunct(_S_get_c_name())
- { _M_initialize_timepunct(); }
-
- template<typename _CharT>
- __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
- size_t __refs)
- : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
- - _M_name_timepunct(__s)
- + _M_name_timepunct(NULL)
- {
- - char* __tmp = new char[std::strlen(__s) + 1];
- - std::strcpy(__tmp, __s);
- + const size_t __len = std::strlen(__s) + 1;
- + char* __tmp = new char[__len];
- + std::memcpy(__tmp, __s, __len);
- _M_name_timepunct = __tmp;
- - _M_initialize_timepunct(__cloc);
- +
- + try
- + { _M_initialize_timepunct(__cloc); }
- + catch(...)
- + {
- + delete [] _M_name_timepunct;
- + __throw_exception_again;
- + }
- }
-
- template<typename _CharT>
- --- gcc-4.2/libstdc++-v3/config/locale/uclibc/c_locale.h.old 2006-09-28 11:39:00.000000000 +0200
- +++ gcc-4.2/libstdc++-v3/config/locale/uclibc/c_locale.h 2006-09-28 12:10:41.000000000 +0200
- @@ -39,21 +39,23 @@
- #pragma GCC system_header
-
- #include <cstring> // get std::strlen
- -#include <cstdio> // get std::snprintf or std::sprintf
- +#include <cstdio> // get std::vsnprintf or std::vsprintf
- #include <clocale>
- #include <langinfo.h> // For codecvt
- #ifdef __UCLIBC_MJN3_ONLY__
- #warning fix this
- #endif
- -#ifdef __UCLIBC_HAS_LOCALE__
- +#ifdef _GLIBCXX_USE_ICONV
- #include <iconv.h> // For codecvt using iconv, iconv_t
- #endif
- -#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
- -#include <libintl.h> // For messages
- +#ifdef HAVE_LIBINTL_H
- +#include <libintl.h> // For messages
- #endif
- +#include <cstdarg>
-
- #ifdef __UCLIBC_MJN3_ONLY__
- #warning what is _GLIBCXX_C_LOCALE_GNU for
- +// psm: used in os/gnu-linux/ctype_noninline.h
- #endif
- #define _GLIBCXX_C_LOCALE_GNU 1
-
- @@ -62,7 +64,7 @@
- #endif
- // #define _GLIBCXX_NUM_CATEGORIES 6
- #define _GLIBCXX_NUM_CATEGORIES 0
- -
- +
- #ifdef __UCLIBC_HAS_XLOCALE__
- namespace __gnu_cxx
- {
- @@ -79,22 +81,24 @@
- typedef int* __c_locale;
- #endif
-
- - // Convert numeric value of type _Tv to string and return length of
- - // string. If snprintf is available use it, otherwise fall back to
- - // the unsafe sprintf which, in general, can be dangerous and should
- + // Convert numeric value of type double to string and return length of
- + // string. If vsnprintf is available use it, otherwise fall back to
- + // the unsafe vsprintf which, in general, can be dangerous and should
- // be avoided.
- - template<typename _Tv>
- - int
- - __convert_from_v(char* __out,
- - const int __size __attribute__ ((__unused__)),
- - const char* __fmt,
- -#ifdef __UCLIBC_HAS_XCLOCALE__
- - _Tv __v, const __c_locale& __cloc, int __prec)
- + inline int
- + __convert_from_v(const __c_locale&
- +#ifndef __UCLIBC_HAS_XCLOCALE__
- + __cloc __attribute__ ((__unused__))
- +#endif
- + ,
- + char* __out,
- + const int __size,
- + const char* __fmt, ...)
- {
- + va_list __args;
- +#ifdef __UCLIBC_HAS_XCLOCALE__
- __c_locale __old = __gnu_cxx::__uselocale(__cloc);
- #else
- - _Tv __v, const __c_locale&, int __prec)
- - {
- # ifdef __UCLIBC_HAS_LOCALE__
- char* __old = std::setlocale(LC_ALL, NULL);
- char* __sav = new char[std::strlen(__old) + 1];
- @@ -103,7 +107,9 @@
- # endif
- #endif
-
- - const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
- + va_start(__args, __fmt);
- + const int __ret = std::vsnprintf(__out, __size, __fmt, __args);
- + va_end(__args);
-
- #ifdef __UCLIBC_HAS_XCLOCALE__
- __gnu_cxx::__uselocale(__old);
|