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);