aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/src
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2015-07-13 21:07:48 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2015-07-13 21:07:48 +0100
commit795038b72255040a9e62cc5da08bd6a6b5d11286 (patch)
treec0fd48362deea33caf921165f8264f977f200c89 /libstdc++-v3/src
parentc05fbb626f931365ee06f63ea99af53cfea99fe1 (diff)
downloadgcc-795038b72255040a9e62cc5da08bd6a6b5d11286.zip
gcc-795038b72255040a9e62cc5da08bd6a6b5d11286.tar.gz
gcc-795038b72255040a9e62cc5da08bd6a6b5d11286.tar.bz2
re PR libstdc++/66855 (codecvt wrong endianness in UTF-16 conversions)
PR libstdc++/66855 * src/c++11/codecvt.cc (__codecvt_utf8_utf16_base::do_in): Override endianness bit in mode. * testsuite/22_locale/codecvt/codecvt_utf8_utf16/66855.cc: New. From-SVN: r225748
Diffstat (limited to 'libstdc++-v3/src')
-rw-r--r--libstdc++-v3/src/c++11/codecvt.cc6
1 files changed, 5 insertions, 1 deletions
diff --git a/libstdc++-v3/src/c++11/codecvt.cc b/libstdc++-v3/src/c++11/codecvt.cc
index 6b82aa8..a454064 100644
--- a/libstdc++-v3/src/c++11/codecvt.cc
+++ b/libstdc++-v3/src/c++11/codecvt.cc
@@ -1264,7 +1264,11 @@ do_in(state_type&, const extern_type* __from, const extern_type* __from_end,
{
range<const char> from{ __from, __from_end };
range<char16_t> to{ __to, __to_end };
- auto res = utf16_in(from, to, _M_maxcode, _M_mode);
+ codecvt_mode mode = codecvt_mode(_M_mode | (consume_header|generate_header));
+#if __BYTE_ORDER__ != __ORDER_BIG_ENDIAN__
+ mode = codecvt_mode(mode | little_endian);
+#endif
+ auto res = utf16_in(from, to, _M_maxcode, mode);
__from_next = from.next;
__to_next = to.next;
return res;