diff options
Diffstat (limited to '')
-rw-r--r-- | libgamma_strerror.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/libgamma_strerror.c b/libgamma_strerror.c new file mode 100644 index 0000000..c252a49 --- /dev/null +++ b/libgamma_strerror.c @@ -0,0 +1,32 @@ +/* See LICENSE file for copyright and license details. */ +#include "common.h" + + +/** + * Get a description of an error + * + * @param error_code The error code, may be an `errno` value, if + * `LIBGAMMA_ERRNO_SET`, the current value of `errno` + * will be used + * @return The description associated with the error code, + * `NULL` if the error code is not recognised + */ +const char * +libgamma_strerror(int error_code) +{ + const char *desc; + if (error_code == LIBGAMMA_ERRNO_SET) + error_code = errno; + switch (error_code) { +#define X(NAME, DESC)\ + case NAME:\ + desc = #NAME;\ + break; + LIST_ERRORS(X) +#undef X + default: + desc = NULL; + break; + } + return desc ? desc : error_code < 0 ? NULL : strerror(error_code); +} |