Commit 84a4f56e authored by Barrett's avatar Barrett Committed by GitHub

Allow compiler to select an strerror_r stringify

On Alpine (and potentially other systems) that don't identify their runtime correctly there is an issue with the string conversion
Specifically, alpine linux and musl where the errno_to_string is incorrectly called.
To fix this I have added two overloaded functions and use auto err to allow the compiler to detect the actual types returned and call the correct method for conversion
parent e9b82867
...@@ -364,6 +364,17 @@ inline std::string filename_to_str(const filename_t& filename) ...@@ -364,6 +364,17 @@ inline std::string filename_to_str(const filename_t& filename)
} }
#endif #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);
} else {
return "Unknown error";
}
}
// Return errno string (thread safe) // Return errno string (thread safe)
inline std::string errno_str(int err_num) inline std::string errno_str(int err_num)
...@@ -386,7 +397,8 @@ inline std::string errno_str(int err_num) ...@@ -386,7 +397,8 @@ inline std::string errno_str(int err_num)
return "Unknown error"; return "Unknown error";
#else // gnu version (might not use the given buf, so its retval pointer must be used) #else // gnu version (might not use the given buf, so its retval pointer must be used)
return std::string(strerror_r(err_num, buf, buf_size)); 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 #endif
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment