diff --git a/src/c++wrap.cc b/src/c++wrap.cc index c21b4735..213f9c4f 100644 --- a/src/c++wrap.cc +++ b/src/c++wrap.cc @@ -26,8 +26,14 @@ #include "c++wrap.hh" #include + +/* force use of POSIX strerror_r instead of non-portable GNU specific */ +#ifdef _GNU_SOURCE +#undef _GNU_SOURCE +#endif #include + #if !defined(HAVE_PIPE2) || !defined(HAVE_O_CLOEXEC) #include @@ -62,8 +68,10 @@ namespace { std::string strerror_r(int errnum) { - char buf[100]; - return strerror_r(errnum, buf, sizeof buf); + static thread_local char buf[100]; + if (strerror_r(errnum, buf, sizeof buf) != 0) + snprintf(buf, sizeof buf, "Unknown error %i", errnum); + return buf; } std::pair pipe2(int flags)