![]() |
Lumiera 0.pre.04~rc.1
»edit your freedom«
|
Lumiera error handling (C interface). More...
Go to the source code of this file.
Lumiera error handling (C interface).
This header declares the interface for C-style error handling based on a thread local error flag. This error state is "sticky"; client code is bound to clear the error flag explicitly before being able to set another error state.
Error states are tightly integrated with NoBug based logging, as well as with the exceptions used by the C++ part of the application: throwing an exception automatically sets the error flag, and by policy, any catch clause has to check, log and clear the error flag too.
Definition in file error.h.
#include <nobug.h>#include <stdlib.h>Macros | |
| #define | LUMIERA_DIE(err) do { NOBUG_ERROR(NOBUG_ON, "Fatal Error: %s ", strchr(LUMIERA_ERROR_##err, ':')); abort(); } while(0) |
| Abort unconditionally with a 'Fatal Error!' message. | |
| #define | LUMIERA_ERROR_DECLARE(err) extern lumiera_err const LUMIERA_ERROR_##err |
| Forward declare an error constant. | |
| #define | LUMIERA_ERROR_DEFINE(err, msg) lumiera_err const LUMIERA_ERROR_##err = "LUMIERA_ERROR_" #err ":" msg |
| Definition and initialisation of an error constant. | |
| #define | LUMIERA_ERROR_SET(flag, err, extra) |
| Helper macro to raise an error for the current thread. | |
| #define | LUMIERA_ERROR_SET_ALERT(flag, err, extra) |
| Helper macro to raise an error for the current thread. | |
| #define | LUMIERA_ERROR_SET_CRITICAL(flag, err, extra) |
| Helper macro to raise an error for the current thread. | |
| #define | LUMIERA_ERROR_SET_WARNING(flag, err, extra) |
| Helper macro to raise an error for the current thread. | |
Typedefs | |
| typedef const char * | lumiera_err |
Functions | |
| lumiera_err | lumiera_error_set (lumiera_err nerr, const char *extra) |
| Set error state for the current thread. | |
| const char * | lumiera_error_extra (void) |
| Query the extra context for the last error. | |
| lumiera_err | lumiera_error (void) |
| Get and clear current error state. | |
| lumiera_err | lumiera_error_peek (void) |
| Check current error state without clearing it Please avoid this function and use lumiera_error() if possible. | |
| int | lumiera_error_expect (lumiera_err expected) |
| Expect some error Check that the current error state matches some expectation, if true then the error state is cleared and 1 is returned, otherwise 0 is returned and the error state remains set. | |
| LUMIERA_ERROR_DECLARE (ERRNO) | |
| LUMIERA_ERROR_DECLARE (UNKNOWN) | |
| typedef const char* lumiera_err |
| #define LUMIERA_DIE | ( | err | ) | do { NOBUG_ERROR(NOBUG_ON, "Fatal Error: %s ", strchr(LUMIERA_ERROR_##err, ':')); abort(); } while(0) |
| #define LUMIERA_ERROR_DECLARE | ( | err | ) | extern lumiera_err const LUMIERA_ERROR_##err |
| #define LUMIERA_ERROR_DEFINE | ( | err, | |
| msg | |||
| ) | lumiera_err const LUMIERA_ERROR_##err = "LUMIERA_ERROR_" #err ":" msg |
Definition and initialisation of an error constant.
This macro eases the error definition in implementation files
| err | name of the error without the 'LUMIERA_ERROR_' prefix (example: NO_MEMORY) |
| msg | message describing the error in plain English (example: "memory allocation failed") |
| #define LUMIERA_ERROR_SET | ( | flag, | |
| err, | |||
| extra | |||
| ) |
Helper macro to raise an error for the current thread.
This macro eases setting an error. It adds NoBug logging support to the low level error handling. Used for unexpected errors which can be handled without any problems.
| flag | NoBug flag describing the subsystem where the error was raised |
| err | name of the error without the 'LUMIERA_ERROR_' prefix (example: NO_MEMORY) |
| extra | optional string (or NULL) which adds some more context to the error, can be a temporary |
| #define LUMIERA_ERROR_SET_ALERT | ( | flag, | |
| err, | |||
| extra | |||
| ) |
Helper macro to raise an error for the current thread.
Same as LUMIERA_ERROR_SET(), but logs at 'LOG_ALERT' level. Use this when the application is about to do a emergency shutdown.
| flag | NoBug flag describing the subsystem where the error was raised |
| err | name of the error without the 'LUMIERA_ERROR_' prefix (example: NO_MEMORY) |
| extra | optional string (or NULL) which adds some more context to the error, can be a temporary |
| #define LUMIERA_ERROR_SET_CRITICAL | ( | flag, | |
| err, | |||
| extra | |||
| ) |
Helper macro to raise an error for the current thread.
Same as LUMIERA_ERROR_SET(), but logs at 'LOG_CRIT' level. Use this when a requested task can not be completed (maybe user intervention is necessary).
| flag | NoBug flag describing the subsystem where the error was raised |
| err | name of the error without the 'LUMIERA_ERROR_' prefix (example: NO_MEMORY) |
| extra | optional string (or NULL) which adds some more context to the error, can be a temporary |
| #define LUMIERA_ERROR_SET_WARNING | ( | flag, | |
| err, | |||
| extra | |||
| ) |
Helper macro to raise an error for the current thread.
Same as LUMIERA_ERROR_SET(), but logs at 'LOG_WARNING' level. Use this when a not unexpected error happens which can be handled.
| flag | NoBug flag describing the subsystem where the error was raised |
| err | name of the error without the 'LUMIERA_ERROR_' prefix (example: NO_MEMORY) |
| extra | optional string (or NULL) which adds some more context to the error, can be a temporary |
| lumiera_err lumiera_error_set | ( | lumiera_err | nerr, |
| const char * | extra | ||
| ) |
Set error state for the current thread.
If the error state of the current thread was cleared, then set it, else preserve the old state.
| nerr | name of the error with 'LUMIERA_ERROR_' prefix (example: LUMIERA_ERROR_NO_MEMORY) |
| extra | a string (possibly a constructed tmpbuf) which adds some more context to the error, can be a temporary |
Definition at line 96 of file error-state.c.
| const char * lumiera_error_extra | ( | void | ) |
Query the extra context for the last error.
Definition at line 126 of file error-state.c.
References lumiera_error_get().
Referenced by lumiera::error::detailInfo().
Here is the call graph for this function:
Here is the caller graph for this function:| lumiera_err lumiera_error | ( | void | ) |
Get and clear current error state.
This function clears the error state, if it needs to be reused, one has to store it in a temporary variable.
Definition at line 115 of file error-state.c.
| lumiera_err lumiera_error_peek | ( | void | ) |
Check current error state without clearing it Please avoid this function and use lumiera_error() if possible.
Errors must be cleared else certain parts of the application refuse to cooperate with you. This shall only be used to decide if one wants to barf out of a loop or subroutine to deliver the error to a higher level.
Definition at line 133 of file error-state.c.
References lumiera_error_get().
Referenced by GuiRunner::GuiRunner(), GuiSubsysDescriptor::~GuiSubsysDescriptor(), CommandUse2_test::check_defaultHandlingPattern(), ExceptionError_test::checkErrorFlagPropagation(), lumiera_plugin_discover(), lumiera_plugin_register(), GtkLumiera::run(), and lumiera::anonymous_namespace{instancehandle.hpp}::throwIfError().
Here is the call graph for this function:
Here is the caller graph for this function:| int lumiera_error_expect | ( | lumiera_err | expected | ) |
Expect some error Check that the current error state matches some expectation, if true then the error state is cleared and 1 is returned, otherwise 0 is returned and the error state remains set.
| expected | error which is expected |
Definition at line 139 of file error-state.c.
References lumiera_error_get(), and NULL.
Here is the call graph for this function:| LUMIERA_ERROR_DECLARE | ( | ERRNO | ) |
| LUMIERA_ERROR_DECLARE | ( | UNKNOWN | ) |