libstdc++: Fix filesystem::temp_directory_path [PR101709]
Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: PR libstdc++/101709 * src/filesystem/ops-common.h (get_temp_directory_from_env): Add error_code parameter. * src/c++17/fs_ops.cc (fs::temp_directory_path): Pass error_code argument to get_temp_directory_from_env and check it. * src/filesystem/ops.cc (fs::temp_directory_path): Likewise.
This commit is contained in:
parent
2aaf69133f
commit
38fb24ba4d
3 changed files with 13 additions and 8 deletions
|
@ -1604,7 +1604,9 @@ fs::temp_directory_path()
|
|||
fs::path
|
||||
fs::temp_directory_path(error_code& ec)
|
||||
{
|
||||
path p = fs::get_temp_directory_from_env();
|
||||
path p = fs::get_temp_directory_from_env(ec);
|
||||
if (ec)
|
||||
return p;
|
||||
auto st = status(p, ec);
|
||||
if (ec)
|
||||
p.clear();
|
||||
|
|
|
@ -572,7 +572,7 @@ _GLIBCXX_BEGIN_NAMESPACE_FILESYSTEM
|
|||
// Caller must check that the path is an accessible directory.
|
||||
#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS
|
||||
inline wstring
|
||||
get_temp_directory_from_env()
|
||||
get_temp_directory_from_env(error_code& ec)
|
||||
{
|
||||
unsigned len = 1024;
|
||||
std::wstring buf;
|
||||
|
@ -583,17 +583,18 @@ _GLIBCXX_BEGIN_NAMESPACE_FILESYSTEM
|
|||
} while (len > buf.size());
|
||||
|
||||
if (len == 0)
|
||||
{
|
||||
ec.assign((int)GetLastError(), std::system_category());
|
||||
return p;
|
||||
}
|
||||
ec.assign((int)GetLastError(), std::system_category());
|
||||
else
|
||||
ec.clear();
|
||||
|
||||
buf.resize(len);
|
||||
return buf;
|
||||
}
|
||||
#else
|
||||
inline const char*
|
||||
get_temp_directory_from_env() noexcept
|
||||
get_temp_directory_from_env(error_code& ec) noexcept
|
||||
{
|
||||
ec.clear();
|
||||
for (auto env : { "TMPDIR", "TMP", "TEMP", "TEMPDIR" })
|
||||
{
|
||||
#if _GLIBCXX_HAVE_SECURE_GETENV
|
||||
|
|
|
@ -1302,7 +1302,9 @@ fs::temp_directory_path()
|
|||
fs::path
|
||||
fs::temp_directory_path(error_code& ec)
|
||||
{
|
||||
path p = fs::get_temp_directory_from_env();
|
||||
path p = fs::get_temp_directory_from_env(ec);
|
||||
if (ec)
|
||||
return p;
|
||||
auto st = status(p, ec);
|
||||
if (ec)
|
||||
p.clear();
|
||||
|
|
Loading…
Add table
Reference in a new issue