aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2021-02-10 16:45:38 +0000
committerJonathan Wakely <jwakely@redhat.com>2021-02-10 16:45:38 +0000
commit313e2dc377d07d5fae5a3fd666ad7000d7e8771d (patch)
tree4ebee38d57a7e804ad73dc972482fa88afa1d545
parent6a6f74be9d6891cb0c17c493b1f9bca20673e6a0 (diff)
downloadgcc-313e2dc377d07d5fae5a3fd666ad7000d7e8771d.zip
gcc-313e2dc377d07d5fae5a3fd666ad7000d7e8771d.tar.gz
gcc-313e2dc377d07d5fae5a3fd666ad7000d7e8771d.tar.bz2
libstdc++: Use correct error category for Windows error codes
When the result of GetLastError() is stored in a std::error_code it should use std::system_category(), not std::generic_category() that is used for POSIX errno values. libstdc++-v3/ChangeLog: * src/c++17/fs_ops.cc (fs::create_hard_link, fs::equivalent) (fs::remove): Use std::system_category() for error codes from GetLastError(). * src/filesystem/ops.cc (fs::create_hard_link, fs::remove): Likewise.
-rw-r--r--libstdc++-v3/src/c++17/fs_ops.cc8
-rw-r--r--libstdc++-v3/src/filesystem/ops.cc4
2 files changed, 6 insertions, 6 deletions
diff --git a/libstdc++-v3/src/c++17/fs_ops.cc b/libstdc++-v3/src/c++17/fs_ops.cc
index 04a559a..7deb4c3 100644
--- a/libstdc++-v3/src/c++17/fs_ops.cc
+++ b/libstdc++-v3/src/c++17/fs_ops.cc
@@ -690,7 +690,7 @@ fs::create_hard_link(const path& to, const path& new_hard_link,
if (CreateHardLinkW(new_hard_link.c_str(), to.c_str(), NULL))
ec.clear();
else
- ec.assign((int)GetLastError(), generic_category());
+ ec.assign((int)GetLastError(), system_category());
#else
ec = std::make_error_code(std::errc::not_supported);
#endif
@@ -882,12 +882,12 @@ fs::equivalent(const path& p1, const path& p2, error_code& ec) noexcept
if (!h1 || !h2)
{
if (!h1 && !h2)
- ec.assign((int)GetLastError(), generic_category());
+ ec.assign((int)GetLastError(), system_category());
return false;
}
if (!h1.get_info() || !h2.get_info())
{
- ec.assign((int)GetLastError(), generic_category());
+ ec.assign((int)GetLastError(), system_category());
return false;
}
return h1.info.dwVolumeSerialNumber == h2.info.dwVolumeSerialNumber
@@ -1263,7 +1263,7 @@ fs::remove(const path& p, error_code& ec) noexcept
return true;
}
else if (!ec)
- ec.assign((int)GetLastError(), generic_category());
+ ec.assign((int)GetLastError(), system_category());
}
else if (status_known(st))
ec.clear();
diff --git a/libstdc++-v3/src/filesystem/ops.cc b/libstdc++-v3/src/filesystem/ops.cc
index 779d73f..c400376 100644
--- a/libstdc++-v3/src/filesystem/ops.cc
+++ b/libstdc++-v3/src/filesystem/ops.cc
@@ -590,7 +590,7 @@ fs::create_hard_link(const path& to, const path& new_hard_link,
if (CreateHardLinkW(new_hard_link.c_str(), to.c_str(), NULL))
ec.clear();
else
- ec.assign((int)GetLastError(), generic_category());
+ ec.assign((int)GetLastError(), system_category());
#else
ec = std::make_error_code(std::errc::not_supported);
#endif
@@ -1062,7 +1062,7 @@ fs::remove(const path& p, error_code& ec) noexcept
return true;
}
else if (!ec)
- ec.assign((int)GetLastError(), generic_category());
+ ec.assign((int)GetLastError(), system_category());
}
else if (status_known(st))
ec.clear();