From 738cedb8be319ca75c493241008475298442da02 Mon Sep 17 00:00:00 2001 From: Norbert Pocs Date: Thu, 30 Jun 2022 23:00:37 +0200 Subject: [PATCH] Add ssh_strerror function - strerror_r for linux - strerror_s for windows Keep in mind that strerror_r has two versions: - XSI - GNU see manpage for more information Signed-off-by: Norbert Pocs Reviewed-by: Jakub Jelen --- include/libssh/priv.h | 2 ++ src/misc.c | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) 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 */ +} + /** @} */