From 00e9d85ac3ae8f99e1bf677bcda4a26444c5aee9 Mon Sep 17 00:00:00 2001 From: Walter Karas Date: Fri, 4 Feb 2022 09:28:15 -0600 Subject: [PATCH] Make TsSharedMutex.h compile on MacOS. --- include/tscpp/util/TsSharedMutex.h | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/include/tscpp/util/TsSharedMutex.h b/include/tscpp/util/TsSharedMutex.h index fa00fc67cba..3ac7f2ea948 100644 --- a/include/tscpp/util/TsSharedMutex.h +++ b/include/tscpp/util/TsSharedMutex.h @@ -59,12 +59,19 @@ class Strerror public: Strerror(int err_num) { - _c_str = strerror_r(err_num, _buf, 256); - if (!_c_str) { + // Handle either GNU or XSI version of strerror_r(). + // + if (!_success(strerror_r(err_num, _buf, 256))) { _c_str = "strerror_r() call failed"; } else { _buf[255] = '\0'; + _c_str = _buf; } + + // Make sure there are no unused function warnings. + // + static_cast(_success(0)); + static_cast(_success(nullptr)); } char const * @@ -76,6 +83,18 @@ class Strerror private: char _buf[256]; char const *_c_str; + + bool + _success(int retval) + { + return retval == 0; + } + + bool + _success(char *retval) + { + return retval != nullptr; + } }; // A class with the same interface as std::shared_mutex, but which is not prone to writer starvation. @@ -200,7 +219,7 @@ class shared_mutex #endif #endif - void + static void _call_fatal(char const *func_name, void *ptr, int errnum) { TSFatal("%s(%p) failed: %s (%d)", func_name, ptr, Strerror(errnum).c_str(), errnum);