while (len > buf.size());
if (len == 0)
- ec.assign((int)GetLastError(), std::system_category());
+ ec = __last_system_error();
else
{
buf.resize(len);
if (CreateHardLinkW(new_hard_link.c_str(), to.c_str(), NULL))
ec.clear();
else
- ec.assign((int)GetLastError(), system_category());
+ ec = __last_system_error();
#else
ec = std::make_error_code(std::errc::not_supported);
#endif
if (!h1 || !h2)
{
if (!h1 && !h2)
- ec.assign((int)GetLastError(), system_category());
+ ec = __last_system_error();
return false;
}
if (!h1.get_info() || !h2.get_info())
{
- ec.assign((int)GetLastError(), system_category());
+ ec = __last_system_error();
return false;
}
return h1.info.dwVolumeSerialNumber == h2.info.dwVolumeSerialNumber
return true;
}
else if (!ec)
- ec.assign((int)GetLastError(), system_category());
+ ec = __last_system_error();
}
else if (status_known(st))
ec.clear();
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ // Get the last OS error (for POSIX this is just errno).
+ inline error_code
+ __last_system_error() noexcept
+ {
+#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS
+ return {::GetLastError(), std::system_category()};
+#else
+ return {errno, std::generic_category()};
+#endif
+ }
+
namespace filesystem
{
namespace __gnu_posix
ec.clear();
}
else
- ec.assign((int)GetLastError(), std::system_category());
+ ec = std::last_system_error();
#else
ec = std::make_error_code(std::errc::not_supported);
#endif
} while (len > buf.size());
if (len == 0)
- ec.assign((int)GetLastError(), std::system_category());
+ ec = __last_system_error();
else
ec.clear();
if (CreateHardLinkW(new_hard_link.c_str(), to.c_str(), NULL))
ec.clear();
else
- ec.assign((int)GetLastError(), system_category());
+ ec = __last_system_error();
#else
ec = std::make_error_code(std::errc::not_supported);
#endif
return true;
}
else if (!ec)
- ec.assign((int)GetLastError(), system_category());
+ ec = __last_system_error();
}
else if (status_known(st))
ec.clear();