libstdc++: Fix filesystem::u8path for mingw targets (PR 95392)
authorJonathan Wakely <jwakely@redhat.com>
Mon, 1 Jun 2020 23:07:05 +0000 (00:07 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Mon, 1 Jun 2020 23:07:05 +0000 (00:07 +0100)
commitcd3f067b82a1331f5fb695879ba5c3d9bb2cca3a
tree2429c301f24875951570a65c662f455e3bbec2ed
parentc7969df1c5d3785c0b409f97e7682a6f0d2637ec
libstdc++: Fix filesystem::u8path for mingw targets (PR 95392)

When I refactored filesystem::path string conversions in
r11-587-584d52b088f9fcf78704b504c3f1f07e17c1cded I failed to update the
mingw-specific code in filesystem::u8path, causing a bootstrap failure.

This fixes it, and further refactors the mingw-specific code along the
same lines as the previous commit. All conversions from UTF-8 strings to
wide strings now use the same helper function, __wstr_from_utf8.

PR libstdc++/95392
* include/bits/fs_path.h (path::_S_to_string): Move to
namespace-scope and rename to ...
(__detail::__string_from_range): ... this.
[WINDOWS] (__detail::__wstr_from_utf8): New function template to
convert a char sequence containing UTF-8 to wstring.
(path::_S_convert(Iter, Iter)): Adjust call to _S_to_string.
(path::_S_convert_loc(Iter, Iter, const locale&)): Likewise.
(u8path(InputIterator, InputIterator)) [WINDOWS]: Use
__string_from_range to obtain a contiguous range and
__wstr_from_utf8 to obtain a wide string.
(u8path(const Source&)) [WINDOWS]: Use __effective_range to
obtain a contiguous range and __wstr_from_utf8 to obtain a wide
string.
(path::_S_convert(const _EcharT*, const _EcharT)) [WINDOWS]:
Use __wstr_from_utf8.
libstdc++-v3/include/bits/fs_path.h