summaryrefslogtreecommitdiffstats
path: root/libcxx/src
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2017-01-03 02:00:33 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2017-01-03 02:00:33 +0000
commitedd09b3db2a40e6e1e39e0a74411a354398417f3 (patch)
tree4488624511b48df83cd41c82a0bb4d41cc16c5e4 /libcxx/src
parent790e10f6df17903df3eec79dbd3bbbb69050b009 (diff)
downloadbcm5719-llvm-edd09b3db2a40e6e1e39e0a74411a354398417f3.tar.gz
bcm5719-llvm-edd09b3db2a40e6e1e39e0a74411a354398417f3.zip
system_error: provide a thread safe stringification for Windows
Provide a strerror_r replacement for Windows. This is needed to build libc++ for Windows with threading. llvm-svn: 290851
Diffstat (limited to 'libcxx/src')
-rw-r--r--libcxx/src/system_error.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/libcxx/src/system_error.cpp b/libcxx/src/system_error.cpp
index 4ecafeaa3b8..b00e461cc8f 100644
--- a/libcxx/src/system_error.cpp
+++ b/libcxx/src/system_error.cpp
@@ -65,8 +65,16 @@ constexpr size_t strerror_buff_size = 1024;
string do_strerror_r(int ev);
-#if defined(__linux__) && !defined(_LIBCPP_HAS_MUSL_LIBC) \
- && (!defined(__ANDROID__) || __ANDROID_API__ >= 23)
+#if defined(_WIN32)
+string do_strerror_r(int ev) {
+ char buffer[strerror_buff_size];
+ if (::strerror_s(buffer, strerror_buff_size, ev) == 0)
+ return string(buffer);
+ std::snprintf(buffer, strerror_buff_size, "unknown error %d", ev);
+ return string(buffer);
+}
+#elif defined(__linux__) && !defined(_LIBCPP_HAS_MUSL_LIBC) && \
+ (!defined(__ANDROID__) || __ANDROID_API__ >= 23)
// GNU Extended version
string do_strerror_r(int ev) {
char buffer[strerror_buff_size];
OpenPOWER on IntegriCloud