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
This commit is contained in:
Barrett 2017-05-09 18:31:44 -07:00 committed by GitHub
parent e9b8286714
commit 84a4f56eae

View File

@ -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)
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
} }