diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2015-06-22 16:09:22 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2015-06-22 16:09:22 +0100 |
commit | 9eb659e0031658e61110e433f37b22188a1a6bcc (patch) | |
tree | 4c733b0c0e0eedd1fbcf50e1a05b7775d73f855a | |
parent | 4db6c2f585053daef2fc24a72518030a85d05e1e (diff) | |
download | gcc-9eb659e0031658e61110e433f37b22188a1a6bcc.zip gcc-9eb659e0031658e61110e433f37b22188a1a6bcc.tar.gz gcc-9eb659e0031658e61110e433f37b22188a1a6bcc.tar.bz2 |
locale_conv.h (__do_str_codecvt): Handle empty range.
* include/bits/locale_conv.h (__do_str_codecvt): Handle empty range.
(wstring_convert): Move into __cxx11 namespace.
(wbuffer_convert(streambuf*, _Codecvt*, state_type)): Fix exception
message.
From-SVN: r224737
-rw-r--r-- | libstdc++-v3/ChangeLog | 5 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/locale_conv.h | 12 |
2 files changed, 16 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 290af68..1e2fda0 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,10 @@ 2015-06-22 Jonathan Wakely <jwakely@redhat.com> + * include/bits/locale_conv.h (__do_str_codecvt): Handle empty range. + (wstring_convert): Move into __cxx11 namespace. + (wbuffer_convert(streambuf*, _Codecvt*, state_type)): Fix exception + message. + PR libstdc++/64657 * include/bits/stl_uninitialized.h (__uninitialized_copy::__uninit_copy): Cast expression to void. diff --git a/libstdc++-v3/include/bits/locale_conv.h b/libstdc++-v3/include/bits/locale_conv.h index 61b535c..fd99499 100644 --- a/libstdc++-v3/include/bits/locale_conv.h +++ b/libstdc++-v3/include/bits/locale_conv.h @@ -58,6 +58,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _OutStr& __outstr, const _Codecvt& __cvt, _State& __state, size_t& __count, _Fn __fn) { + if (__first == __last) + { + __outstr.clear(); + return true; + } + size_t __outchars = 0; auto __next = __first; const auto __maxlen = __cvt.max_length() + 1; @@ -150,6 +156,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __str_codecvt_out(__first, __last, __outstr, __cvt, __state, __n); } +_GLIBCXX_BEGIN_NAMESPACE_CXX11 + /// String conversions template<typename _Codecvt, typename _Elem = wchar_t, typename _Wide_alloc = allocator<_Elem>, @@ -301,6 +309,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION bool _M_with_strings = false; }; +_GLIBCXX_END_NAMESPACE_CXX11 + /// Buffer conversions template<typename _Codecvt, typename _Elem = wchar_t, typename _Tr = char_traits<_Elem>> @@ -325,7 +335,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : _M_buf(__bytebuf), _M_cvt(__pcvt), _M_state(__state) { if (!_M_cvt) - __throw_logic_error("wstring_convert"); + __throw_logic_error("wbuffer_convert"); _M_always_noconv = _M_cvt->always_noconv(); |