#include <stdlib.h>
#include <avis/stdtypes.h>
#include <avis/defs.h>
Go to the source code of this file.
Data Structures | |
| struct | ElvinError |
| Error reporting information for the Avis client library. More... | |
Defines | |
| #define | ELVIN_ERROR_BASE 0 |
| #define | ELVIN_ERRNO_BASE 10000 |
| #define | ELVIN_HOST_ERROR_BASE 20000 |
| #define | ELVIN_ERROR_NONE 0 |
| #define | ELVIN_ERROR_INTERNAL (ELVIN_ERROR_BASE + 1) |
| #define | ELVIN_ERROR_PROTOCOL (ELVIN_ERROR_BASE + 2) |
| #define | ELVIN_ERROR_CONNECTION_CLOSED (ELVIN_ERROR_BASE + 3) |
| #define | ELVIN_ERROR_INVALID_URI (ELVIN_ERROR_BASE + 4) |
| #define | ELVIN_ERROR_SYNTAX (ELVIN_ERROR_BASE + 5) |
| #define | ELVIN_ERROR_TRIVIAL_EXPRESSION (ELVIN_ERROR_BASE + 6) |
| #define | ELVIN_ERROR_NACK (ELVIN_ERROR_BASE + 7) |
| #define | ELVIN_ERROR_USAGE (ELVIN_ERROR_BASE + 8) |
| #define | ELVIN_ERROR_TIMEOUT (ELVIN_ERROR_BASE + 9) |
| #define | ELVIN_ERROR_ROUTER_FAILURE (ELVIN_ERROR_BASE + 10) |
| #define | avis_emalloc(size) do_avis_emalloc ((size), __FILE__, __LINE__) |
| #define | avis_estrdup(str) do_avis_estrdup ((str), __FILE__, __LINE__) |
| #define | ELVIN_EMPTY_ERROR {ELVIN_ERROR_NONE, NULL} |
| An empty error instance. | |
| #define | elvin_error_reset(error) (elvin_error_free (error)) |
| Free any resources and reset the error info back to OK state. | |
| #define | on_error_return_false(stat) on_error_return (stat, false) |
| Macro statement to return false if an error is set in the "error" variable inside the current scope. | |
| #define | on_error_return(stat, retval) {stat; if (elvin_error_occurred (error)) return (retval);} |
| Macro statement to return a given value if an error is set in the "error" variable inside the current scope. | |
| #define | host_to_elvin_error(code) (ELVIN_HOST_ERROR_BASE + (code)) |
| Convert the h_errno error code generated by gethostbyname () etc to an error code that can be used with elvin_error_set(). | |
| #define | errno_to_elvin_error(code) (ELVIN_ERRNO_BASE + (code)) |
| Translate a system errno error code into a code that can be used with elvin_error_set(). | |
| #define | elvin_error_ok(error) ((error)->code == ELVIN_ERROR_NONE) |
| True if no error has occurred. | |
| #define | elvin_error_occurred(error) (!elvin_error_ok (error)) |
| True if an error has occurred. | |
Functions | |
| AVIS_PUBLIC void * | do_avis_emalloc (size_t size, const char *file, int line) |
| AVIS_PUBLIC char * | do_avis_estrdup (const char *str, const char *file, int line) |
| AVIS_PUBLIC void | elvin_error_free (ElvinError *error) |
| Free any resources allocated to an error instance and reset the error code. | |
| AVIS_PUBLIC void | elvin_error_init (ElvinError *error) |
| Initialise an uninitialised error instance. | |
| AVIS_PUBLIC void | elvin_perror (const char *tag, ElvinError *error) |
| Like perror () but taking error info from an ElvinError instance. | |
| AVIS_PUBLIC bool | elvin_error_from_errno (ElvinError *error) |
| Load an error status from the system's "errno" error variable and strerror () function. | |
| AVIS_PUBLIC bool | elvin_error_set (ElvinError *error, int code, const char *message,...) |
| Signal an error has occurred. | |
| #define avis_emalloc | ( | size | ) | do_avis_emalloc ((size), __FILE__, __LINE__) |
| #define avis_estrdup | ( | str | ) | do_avis_estrdup ((str), __FILE__, __LINE__) |
| #define ELVIN_EMPTY_ERROR {ELVIN_ERROR_NONE, NULL} |
An empty error instance.
This can be assigned to an error instance to initialise it on declaration rather than using elvin_error_init() (which is the other method). Regardless of initialisation method, elvin_error_free() should be used to release any resources allocated before disposing.
| #define ELVIN_ERRNO_BASE 10000 |
| #define ELVIN_ERROR_BASE 0 |
| #define ELVIN_ERROR_CONNECTION_CLOSED (ELVIN_ERROR_BASE + 3) |
| #define ELVIN_ERROR_INTERNAL (ELVIN_ERROR_BASE + 1) |
| #define ELVIN_ERROR_INVALID_URI (ELVIN_ERROR_BASE + 4) |
| #define ELVIN_ERROR_NACK (ELVIN_ERROR_BASE + 7) |
| #define ELVIN_ERROR_NONE 0 |
| #define elvin_error_occurred | ( | error | ) | (!elvin_error_ok (error)) |
True if an error has occurred.
| #define elvin_error_ok | ( | error | ) | ((error)->code == ELVIN_ERROR_NONE) |
True if no error has occurred.
| #define ELVIN_ERROR_PROTOCOL (ELVIN_ERROR_BASE + 2) |
| #define elvin_error_reset | ( | error | ) | (elvin_error_free (error)) |
Free any resources and reset the error info back to OK state.
| #define ELVIN_ERROR_ROUTER_FAILURE (ELVIN_ERROR_BASE + 10) |
| #define ELVIN_ERROR_SYNTAX (ELVIN_ERROR_BASE + 5) |
| #define ELVIN_ERROR_TIMEOUT (ELVIN_ERROR_BASE + 9) |
| #define ELVIN_ERROR_TRIVIAL_EXPRESSION (ELVIN_ERROR_BASE + 6) |
| #define ELVIN_ERROR_USAGE (ELVIN_ERROR_BASE + 8) |
| #define ELVIN_HOST_ERROR_BASE 20000 |
| #define errno_to_elvin_error | ( | code | ) | (ELVIN_ERRNO_BASE + (code)) |
Translate a system errno error code into a code that can be used with elvin_error_set().
| #define host_to_elvin_error | ( | code | ) | (ELVIN_HOST_ERROR_BASE + (code)) |
Convert the h_errno error code generated by gethostbyname () etc to an error code that can be used with elvin_error_set().
| #define on_error_return | ( | stat, | |||
| retval | ) | {stat; if (elvin_error_occurred (error)) return (retval);} |
Macro statement to return a given value if an error is set in the "error" variable inside the current scope.
| stat | The statement to execute before the test. | |
| retval | The value to return on error. |
| #define on_error_return_false | ( | stat | ) | on_error_return (stat, false) |
Macro statement to return false if an error is set in the "error" variable inside the current scope.
| stat | The statement to execute before the test. |
| AVIS_PUBLIC void* do_avis_emalloc | ( | size_t | size, | |
| const char * | file, | |||
| int | line | |||
| ) |
| AVIS_PUBLIC char* do_avis_estrdup | ( | const char * | str, | |
| const char * | file, | |||
| int | line | |||
| ) |
| AVIS_PUBLIC void elvin_error_free | ( | ElvinError * | error | ) |
Free any resources allocated to an error instance and reset the error code.
The error instance may be reused after this call.
| AVIS_PUBLIC bool elvin_error_from_errno | ( | ElvinError * | error | ) |
Load an error status from the system's "errno" error variable and strerror () function.
| error | The error to affect. |
| AVIS_PUBLIC void elvin_error_init | ( | ElvinError * | error | ) |
| AVIS_PUBLIC bool elvin_error_set | ( | ElvinError * | error, | |
| int | code, | |||
| const char * | message, | |||
| ... | ||||
| ) |
Signal an error has occurred.
If an error is already set, this has no effect (see elvin_error_reset() if you want to override any existing error status).
| error | The error to target. | |
| code | The error code. One of the ELVIN_ERROR_* defines or host_to_elvin_error(). | |
| message | The message, possibly including printf-style format placeholders. | |
| ... | The rest of the arguments if message contains format placeholders. |
| AVIS_PUBLIC void elvin_perror | ( | const char * | tag, | |
| ElvinError * | error | |||
| ) |
Like perror () but taking error info from an ElvinError instance.
1.5.6