mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-16 18:40:57 +08:00
Allow Filesystem TS to compile without wchar_t
* include/bits/locale_conv.h [!_GLIBCXX_USE_WCHAR_T] (__do_str_codecvt, __str_codecvt_in, __str_codecvt_out): Enable. * include/experimental/fs_path.h [!_GLIBCXX_USE_WCHAR_T] (path::wstring, path::generic_wstring): Disable. * src/filesystem/path.cc (path::_S_convert_loc) [!_GLIBCXX_USE_WCHAR_T]: Skip conversion. * testsuite/experimental/filesystem/path/assign/assign.cc: Check for wchar_t support. * testsuite/experimental/filesystem/path/concat/strings.cc: Likewise. * testsuite/experimental/filesystem/path/construct/range.cc: Likewise. From-SVN: r228417
This commit is contained in:
parent
43222a5ec8
commit
7fcdbdd21d
@ -1,5 +1,16 @@
|
||||
2015-10-02 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* include/bits/locale_conv.h [!_GLIBCXX_USE_WCHAR_T]
|
||||
(__do_str_codecvt, __str_codecvt_in, __str_codecvt_out): Enable.
|
||||
* include/experimental/fs_path.h [!_GLIBCXX_USE_WCHAR_T]
|
||||
(path::wstring, path::generic_wstring): Disable.
|
||||
* src/filesystem/path.cc (path::_S_convert_loc)
|
||||
[!_GLIBCXX_USE_WCHAR_T]: Skip conversion.
|
||||
* testsuite/experimental/filesystem/path/assign/assign.cc: Check for
|
||||
wchar_t support.
|
||||
* testsuite/experimental/filesystem/path/concat/strings.cc: Likewise.
|
||||
* testsuite/experimental/filesystem/path/construct/range.cc: Likewise.
|
||||
|
||||
* testsuite/util/testsuite_fs.h (nonexistent_path): Use less generic
|
||||
name for paths. Prefer snprintf to sprintf.
|
||||
|
||||
|
@ -44,8 +44,6 @@ namespace std _GLIBCXX_VISIBILITY(default)
|
||||
{
|
||||
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||
|
||||
/**
|
||||
* @addtogroup locales
|
||||
* @{
|
||||
@ -157,6 +155,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
return __str_codecvt_out(__first, __last, __outstr, __cvt, __state, __n);
|
||||
}
|
||||
|
||||
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||
|
||||
_GLIBCXX_BEGIN_NAMESPACE_CXX11
|
||||
|
||||
/// String conversions
|
||||
@ -533,10 +533,10 @@ _GLIBCXX_END_NAMESPACE_CXX11
|
||||
bool _M_always_noconv;
|
||||
};
|
||||
|
||||
/// @} group locales
|
||||
|
||||
#endif // _GLIBCXX_USE_WCHAR_T
|
||||
|
||||
/// @} group locales
|
||||
|
||||
_GLIBCXX_END_NAMESPACE_VERSION
|
||||
} // namespace
|
||||
|
||||
|
@ -279,7 +279,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
|
||||
string(const _Allocator& __a = _Allocator()) const;
|
||||
|
||||
std::string string() const;
|
||||
#if _GLIBCXX_USE_WCHAR_T
|
||||
std::wstring wstring() const;
|
||||
#endif
|
||||
std::string u8string() const;
|
||||
std::u16string u16string() const;
|
||||
std::u32string u32string() const;
|
||||
@ -291,7 +293,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
|
||||
generic_string(const _Allocator& __a = _Allocator()) const;
|
||||
|
||||
std::string generic_string() const;
|
||||
#if _GLIBCXX_USE_WCHAR_T
|
||||
std::wstring generic_wstring() const;
|
||||
#endif
|
||||
std::string generic_u8string() const;
|
||||
std::u16string generic_u16string() const;
|
||||
std::u32string generic_u32string() const;
|
||||
@ -828,8 +832,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
|
||||
inline std::string
|
||||
path::string() const { return string<char>(); }
|
||||
|
||||
#if _GLIBCXX_USE_WCHAR_T
|
||||
inline std::wstring
|
||||
path::wstring() const { return string<wchar_t>(); }
|
||||
#endif
|
||||
|
||||
inline std::string
|
||||
path::u8string() const
|
||||
@ -865,8 +871,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
|
||||
inline std::string
|
||||
path::generic_string() const { return string(); }
|
||||
|
||||
#if _GLIBCXX_USE_WCHAR_T
|
||||
inline std::wstring
|
||||
path::generic_wstring() const { return wstring(); }
|
||||
#endif
|
||||
|
||||
inline std::string
|
||||
path::generic_u8string() const { return u8string(); }
|
||||
|
@ -437,8 +437,9 @@ path::_M_trim()
|
||||
|
||||
path::string_type
|
||||
path::_S_convert_loc(const char* __first, const char* __last,
|
||||
const std::locale& __loc)
|
||||
const std::locale& __loc)
|
||||
{
|
||||
#if _GLIBCXX_USE_WCHAR_T
|
||||
auto& __cvt = std::use_facet<codecvt<wchar_t, char, mbstate_t>>(__loc);
|
||||
basic_string<wchar_t> __ws;
|
||||
if (!__str_codecvt_in(__first, __last, __ws, __cvt))
|
||||
@ -450,6 +451,9 @@ path::_S_convert_loc(const char* __first, const char* __last,
|
||||
#else
|
||||
return _Cvt<wchar_t>::_S_convert(__ws.data(), __ws.data() + __ws.size());
|
||||
#endif
|
||||
#else
|
||||
return {__first, __last};
|
||||
#endif
|
||||
}
|
||||
|
||||
std::size_t
|
||||
|
@ -36,6 +36,7 @@ test01()
|
||||
p2 = s.c_str();
|
||||
compare_paths(p0, p2);
|
||||
|
||||
#if _GLIBCXX_USE_WCHAR_T
|
||||
std::wstring ws(s.begin(), s.end());
|
||||
|
||||
p3 = ws;
|
||||
@ -43,6 +44,7 @@ test01()
|
||||
|
||||
p4 = ws.c_str();
|
||||
compare_paths(p0, p4);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -65,6 +67,7 @@ test02()
|
||||
p4.assign( s.c_str(), s.c_str() + s.size() );
|
||||
compare_paths(p0, p4);
|
||||
|
||||
#if _GLIBCXX_USE_WCHAR_T
|
||||
std::wstring ws(s.begin(), s.end());
|
||||
|
||||
p5.assign(ws);
|
||||
@ -78,6 +81,7 @@ test02()
|
||||
|
||||
p8.assign( ws.c_str(), ws.c_str() + ws.size() );
|
||||
compare_paths(p0, p8);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,11 @@ test01()
|
||||
VERIFY( p.filename() == "foobar" );
|
||||
p += '/';
|
||||
VERIFY( p.parent_path() == "/foobar" && p.filename() == "." );
|
||||
#if _GLIBCXX_USE_WCHAR_T
|
||||
p += L"baz.txt";
|
||||
#else
|
||||
p += "baz.txt";
|
||||
#endif
|
||||
VERIFY( p.filename() == "baz.txt" );
|
||||
p.concat("/dir/");
|
||||
VERIFY( p.parent_path() == "/foobar/baz.txt/dir" && p.filename() == "." );
|
||||
|
@ -37,19 +37,22 @@ test01()
|
||||
path p3( s.c_str() );
|
||||
path p4( s.c_str(), s.c_str() + s.size() );
|
||||
|
||||
compare_paths(p1, p2);
|
||||
compare_paths(p1, p3);
|
||||
compare_paths(p1, p4);
|
||||
|
||||
#if _GLIBCXX_USE_WCHAR_T
|
||||
std::wstring ws(s.begin(), s.end());
|
||||
path p5 = ws;
|
||||
path p6( ws.begin(), ws.end() );
|
||||
path p7( ws.c_str() );
|
||||
path p8( ws.c_str(), ws.c_str() + ws.size() );
|
||||
|
||||
compare_paths(p1, p2);
|
||||
compare_paths(p1, p3);
|
||||
compare_paths(p1, p4);
|
||||
compare_paths(p1, p5);
|
||||
compare_paths(p1, p6);
|
||||
compare_paths(p1, p7);
|
||||
compare_paths(p1, p8);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user