X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=error.c;fp=error.c;h=e6abd4bd7a83d62c1f42bf4438dd46092e2f07eb;hp=0000000000000000000000000000000000000000;hb=cdf156ba36def94a86453b017054470ee9ae7608;hpb=30b770d5375522bd014502b9348aff3ee36e830d diff --git a/error.c b/error.c new file mode 100644 index 0000000..e6abd4b --- /dev/null +++ b/error.c @@ -0,0 +1,152 @@ +/* + * This file is part of the libsigrokdecode project. + * + * Copyright (C) 2013 Uwe Hermann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libsigrokdecode.h" + +/** + * @file + * + * Error handling in libsigrokdecode. + */ + +/** + * @defgroup grp_error Error handling + * + * Error handling in libsigrokdecode. + * + * libsigrokdecode functions usually return @ref SRD_OK upon success, or a + * negative error code on failure. + * + * @{ + */ + +/** + * Return a human-readable error string for the given libsigrokdecode error + * code. + * + * @param error_code A libsigrokdecode error code number, such as + * SRD_ERR_MALLOC. + * + * @return A const string containing a short, human-readable (English) + * description of the error, such as "memory allocation error". + * The string must NOT be free'd by the caller! + * + * @see srd_strerror_name + * + * @since 0.2.0 + */ +SRD_API const char *srd_strerror(int error_code) +{ + const char *str; + + /* + * Note: All defined SRD_* error macros from libsigrokdecode.h must + * have an entry in this function, as well as in srd_strerror_name(). + */ + + switch (error_code) { + case SRD_OK: + str = "no error"; + break; + case SRD_ERR: + str = "generic/unspecified error"; + break; + case SRD_ERR_MALLOC: + str = "memory allocation error"; + break; + case SRD_ERR_ARG: + str = "invalid argument"; + break; + case SRD_ERR_BUG: + str = "internal error"; + break; + case SRD_ERR_PYTHON: + str = "Python API error"; + break; + case SRD_ERR_DECODERS_DIR: + str = "decoders directory access error"; + break; + default: + str = "unknown error"; + break; + } + + return str; +} + +/** + * Return the "name" string of the given libsigrokdecode error code. + * + * For example, the "name" of the SRD_ERR_MALLOC error code is + * "SRD_ERR_MALLOC", the name of the SRD_OK code is "SRD_OK", and so on. + * + * This function can be used for various purposes where the "name" string of + * a libsigrokdecode error code is useful. + * + * @param error_code A libsigrokdecode error code number, such as + * SRD_ERR_MALLOC. + * + * @return A const string containing the "name" of the error code as string. + * The string must NOT be free'd by the caller! + * + * @see srd_strerror + * + * @since 0.2.0 + */ +SRD_API const char *srd_strerror_name(int error_code) +{ + const char *str; + + /* + * Note: All defined SRD_* error macros from libsigrokdecode.h must + * have an entry in this function, as well as in srd_strerror(). + */ + + switch (error_code) { + case SRD_OK: + str = "SRD_OK"; + break; + case SRD_ERR: + str = "SRD_ERR"; + break; + case SRD_ERR_MALLOC: + str = "SRD_ERR_MALLOC"; + break; + case SRD_ERR_ARG: + str = "SRD_ERR_ARG"; + break; + case SRD_ERR_BUG: + str = "SRD_ERR_BUG"; + break; + case SRD_ERR_PYTHON: + str = "SRD_ERR_PYTHON"; + break; + case SRD_ERR_DECODERS_DIR: + str = "SRD_ERR_DECODERS_DIR"; + break; + default: + str = "unknown error code"; + break; + } + + return str; +} + +/** @} */