[libcxx] r290851 - system_error: provide a thread safe stringification for Windows

Saleem Abdulrasool via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 2 18:00:33 PST 2017


Author: compnerd
Date: Mon Jan  2 20:00:33 2017
New Revision: 290851

URL: http://llvm.org/viewvc/llvm-project?rev=290851&view=rev
Log:
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.

Modified:
    libcxx/trunk/src/system_error.cpp

Modified: libcxx/trunk/src/system_error.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/system_error.cpp?rev=290851&r1=290850&r2=290851&view=diff
==============================================================================
--- libcxx/trunk/src/system_error.cpp (original)
+++ libcxx/trunk/src/system_error.cpp Mon Jan  2 20:00:33 2017
@@ -65,8 +65,16 @@ constexpr size_t strerror_buff_size = 10
 
 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];




More information about the cfe-commits mailing list