diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2014-08-19 17:10:03 -0400 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2015-10-25 11:03:56 -0400 |
commit | 7b09710392d35fb55b52031d447a542d99fc6b4b (patch) | |
tree | 270eb927ee8c52ceeb99926ebf4843704775a610 /libdimension/dimension/base/error.h | |
parent | 200c86b91ea7063d35be3bffc11c5da53c054653 (diff) | |
download | dimension-7b09710392d35fb55b52031d447a542d99fc6b4b.tar.xz |
Modularize the libdimension codebase.
Diffstat (limited to 'libdimension/dimension/base/error.h')
-rw-r--r-- | libdimension/dimension/base/error.h | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/libdimension/dimension/base/error.h b/libdimension/dimension/base/error.h new file mode 100644 index 0000000..d039081 --- /dev/null +++ b/libdimension/dimension/base/error.h @@ -0,0 +1,118 @@ +/************************************************************************* + * Copyright (C) 2009-2014 Tavian Barnes <tavianator@tavianator.com> * + * * + * This file is part of The Dimension Library. * + * * + * The Dimension Library is free software; you can redistribute it and/ * + * or modify it under the terms of the GNU Lesser General Public License * + * as published by the Free Software Foundation; either version 3 of the * + * License, or (at your option) any later version. * + * * + * The Dimension Library 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 * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with this program. If not, see * + * <http://www.gnu.org/licenses/>. * + *************************************************************************/ + +/** + * @file + * Error reporting. + */ + +#ifndef DMNSN_BASE_H +#error "Please include <dimension/base.h> instead of this header directly." +#endif + +#include <stdbool.h> + +/** + * Report a warning. + * @param[in] str A string to print explaining the warning. + */ +#define dmnsn_warning(str) \ + dmnsn_report_warning(DMNSN_FUNC, __FILE__, __LINE__, str) + +/** + * Report an error. + * @param[in] str A string to print explaining the error. + */ +#define dmnsn_error(str) \ + dmnsn_report_error(DMNSN_FUNC, __FILE__, __LINE__, str) + +/** + * @def dmnsn_assert + * Make an assertion. + * @param[in] expr The expression to assert. + * @param[in] str A string to print if the assertion fails. + */ +#if DMNSN_DEBUG + #define dmnsn_assert(expr, str) \ + do { \ + if (!(expr)) { \ + dmnsn_error((str)); \ + } \ + } while (0) +#else + #define dmnsn_assert(expr, str) ((void)0) +#endif + +/** + * @def dmnsn_unreachable + * Express that a line of code is unreachable. + * @param[in] str A string to print if the line is reached. + */ +#if DMNSN_DEBUG + #define dmnsn_unreachable(str) dmnsn_error((str)) +#else + #define dmnsn_unreachable(str) DMNSN_UNREACHABLE() +#endif + +/** + * @internal + * Called by dmnsn_warning(); don't call directly. + * @param[in] func The name of the function where the error originated. + * @param[in] file The file where the error originated. + * @param[in] line The line number where the error originated. + * @param[in] str A string describing the error. + */ +void dmnsn_report_warning(const char *func, const char *file, unsigned int line, const char *str); + +/** + * @internal + * Called by dmnsn_error(); don't call directly. + * @param[in] func The name of the function where the error originated. + * @param[in] file The file where the error originated. + * @param[in] line The line number where the error originated. + * @param[in] str A string describing the error. + */ +DMNSN_NORETURN dmnsn_report_error(const char *func, const char *file, unsigned int line, const char *str); + +/** + * Treat warnings as errors. + * @param[in] always_die Whether to die on warnings. + */ +void dmnsn_die_on_warnings(bool always_die); + +/** + * Fatal error callback type. This function should never return. + */ +typedef void dmnsn_fatal_error_fn(void); + +/** + * Get the libdimension fatal error handler, thread-safely. The default fatal + * error handler terminates the current thread, or the entire program if the + * current thread is the main thread. + * @return The current fatal error handler. + */ +dmnsn_fatal_error_fn *dmnsn_get_fatal_error_fn(void); + +/** + * Set the libdimension fatal error handler, thread-safely. + * @param[in] fatal The new fatal error handler. This function must never + * return. + */ +void dmnsn_set_fatal_error_fn(dmnsn_fatal_error_fn *fatal); |