From 38b3ecb02e2f333fea7af2034fe4d693d9eea8c0 Mon Sep 17 00:00:00 2001 From: gabime Date: Fri, 1 Jun 2018 17:06:20 +0300 Subject: [PATCH] use fmt::safe_strerror --- include/spdlog/common.h | 13 ++++++++- include/spdlog/details/os.h | 54 ++----------------------------------- 2 files changed, 14 insertions(+), 53 deletions(-) diff --git a/include/spdlog/common.h b/include/spdlog/common.h index a2cd226e..b4228e7f 100644 --- a/include/spdlog/common.h +++ b/include/spdlog/common.h @@ -158,7 +158,18 @@ public: spdlog_ex(const std::string &msg, int last_errno) { - _msg = msg + ": " + details::os::errno_str(last_errno); + std::string errno_string; + char buf[256], *buf_ptr = buf; + + if (fmt::safe_strerror(last_errno, buf_ptr, sizeof(buf)) == 0) + { + errno_string = buf_ptr; + } + else + { + errno_string = "Unknown error"; + } + _msg = msg + ": " + errno_string; } const char *what() const SPDLOG_NOEXCEPT override diff --git a/include/spdlog/details/os.h b/include/spdlog/details/os.h index 27fc1b8e..28eb53c3 100644 --- a/include/spdlog/details/os.h +++ b/include/spdlog/details/os.h @@ -4,7 +4,7 @@ // #pragma once -#include "spdlog/common.h" +#include "../common.h" #include #include @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -283,7 +282,7 @@ inline int utc_minutes_offset(const std::tm &tm = details::os::localtime()) return offset; #else -#if defined(sun) || defined(__sun) +#if defined(sun) || defined(__sun) || defined(_AIX) // 'tm_gmtoff' field is BSD extension and it's missing on SunOS/Solaris struct helper { @@ -384,54 +383,6 @@ inline std::string filename_to_str(const filename_t &filename) } #endif -inline std::string errno_to_string(char[256], char *res) -{ - return std::string(res); -} - -inline std::string errno_to_string(char buf[256], int res) -{ - if (res == 0) - { - return std::string(buf); - } - return "Unknown error"; -} - -// Return errno string (thread safe) -inline std::string errno_str(int err_num) -{ - char buf[256]; - SPDLOG_CONSTEXPR auto buf_size = sizeof(buf); - -#ifdef _WIN32 - if (strerror_s(buf, buf_size, err_num) == 0) - { - return std::string(buf); - } - else - { - return "Unknown error"; - } - -#elif defined(__FreeBSD__) || defined(__APPLE__) || defined(ANDROID) || defined(__SUNPRO_CC) || \ - ((_POSIX_C_SOURCE >= 200112L) && !defined(_GNU_SOURCE)) // posix version - - if (strerror_r(err_num, buf, buf_size) == 0) - { - return std::string(buf); - } - else - { - return "Unknown error"; - } - -#else // gnu version (might not use the given buf, so its retval pointer must be used) - auto err = strerror_r(err_num, buf, buf_size); // let compiler choose type - return errno_to_string(buf, err); // use overloading to select correct stringify function -#endif -} - inline int pid() { @@ -475,7 +426,6 @@ inline bool in_terminal(FILE *file) return isatty(fileno(file)) != 0; #endif } - } // namespace os } // namespace details } // namespace spdlog