From 8f3fbebede0a0fcce632a4390aaf54d7572795c8 Mon Sep 17 00:00:00 2001 From: Grant Moyer Date: Fri, 25 Feb 2022 12:56:22 -0500 Subject: [PATCH] Make error messages portable --- src/modules/keyboard_state.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/modules/keyboard_state.cpp b/src/modules/keyboard_state.cpp index 7813c3b..63871fd 100644 --- a/src/modules/keyboard_state.cpp +++ b/src/modules/keyboard_state.cpp @@ -21,13 +21,21 @@ class errno_error : public std::runtime_error { code(code) {} private: static auto getErrorMsg(int err, const char* msg) -> std::string { - const auto errno_name = strerrorname_np(err); - const auto errno_str = strerror(err); std::string error_msg{msg}; error_msg += ": "; + +#ifdef _GNU_SOURCE + // strerrorname_np gets the error code's name; it's nice to have, but it's a GNU extension + const auto errno_name = strerrorname_np(err); error_msg += errno_name; error_msg += " "; +#endif + + // strerror(3) man page says 1024 should be a big enough buffer to avoid ERANGE + char errno_str[1024] = {}; + strerror_r(err, errno_str, sizeof errno_str); error_msg += errno_str; + return error_msg; } };