diff --git a/rclcpp/src/rclcpp/utilities.cpp b/rclcpp/src/rclcpp/utilities.cpp index 4ae1b551b3..73c5794e38 100644 --- a/rclcpp/src/rclcpp/utilities.cpp +++ b/rclcpp/src/rclcpp/utilities.cpp @@ -117,7 +117,17 @@ rclcpp::utilities::init(int argc, char * argv[]) // NOLINTNEXTLINE(runtime/arrays) char error_string[error_length]; #ifndef _WIN32 - strerror_r(errno, error_string, error_length); +#if (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE + int error_status = strerror_r(errno, error_string, error_length); + if (error_status != 0) { + throw std::runtime_error("Failed to set error message"); + } +#else + char * msg = strerror_r(errno, error_string, error_length); + if (msg != error_string) { + strncpy(error_string, msg, sizeof(error_string)); + } +#endif #else strerror_s(error_string, error_length, errno); #endif