diff --git a/include/libssh/priv.h b/include/libssh/priv.h index 1d341d4e..938d70b9 100644 --- a/include/libssh/priv.h +++ b/include/libssh/priv.h @@ -429,4 +429,6 @@ void ssh_agent_state_free(void *data); bool is_ssh_initialized(void); +char *ssh_strerror(int err_num, char *buf, size_t buflen); + #endif /* _LIBSSH_PRIV_H */ diff --git a/src/misc.c b/src/misc.c index 499cf312..8a5dea4a 100644 --- a/src/misc.c +++ b/src/misc.c @@ -1941,4 +1941,28 @@ char *ssh_strreplace(const char *src, const char *pattern, const char *replace) } } +/** + * @internal + * + * @brief Processes errno into error string + * + * @param[in] err_num The errno value + * @param[out] buf Pointer to a place where the string could be saved + * @param[in] buflen The allocated size of buf + * + * @return error string + */ +char *ssh_strerror(int err_num, char *buf, size_t buflen) +{ +#if defined(_WIN32) + strerror_s(buf, buflen, err_num); + return buf; +#elif !defined(_GNU_SOURCE) + strerror_r(err_num, buf, buflen); + return buf; +#else + return strerror_r(err_num, buf, buflen); +#endif /* _WIN32 */ +} + /** @} */