--- a/src/error.h Tue Mar 10 02:51:44 2009 +0200
+++ b/src/error.h Tue Mar 10 03:27:04 2009 +0200
@@ -12,75 +12,74 @@
*/
typedef unsigned int err_t;
-/*
- * Bitmask of error_info.extra meanings
+/**
+ * Ways to interpret error_info.extra
*/
enum error_extra_types {
- // bit offset of ERR_EXTRA_* mask in error_code
- _ERR_EXTRA_OFFSET = 3 * 8,
-
- // mask of bits used for the error_extra_types value
- _ERR_EXTRA_MASK = 0xff << _ERR_EXTRA_OFFSET,
+ ERR_EXTRA_NONE = 0,
- ERR_EXTRA_NONE = 0x00 << _ERR_EXTRA_OFFSET,
- ERR_EXTRA_ERRNO = 0x01 << _ERR_EXTRA_OFFSET,
- ERR_EXTRA_GAI = 0x02 << _ERR_EXTRA_OFFSET,
- ERR_EXTRA_GNUTLS = 0x03 << _ERR_EXTRA_OFFSET,
-
+ /** libc errno, using strerror() */
+ ERR_EXTRA_ERRNO,
+
+ /** libc resolver, using gai_strerror() */
+ ERR_EXTRA_GAI,
+
+ /** gnutls, using gnutls_strerror() */
+ ERR_EXTRA_GNUTLS,
};
-
-#define _ERROR_CODE(name, code, extra) name = (code | ERR_EXTRA_ ## extra)
-/*
+/**
* List of defined error codes, organized mostly by function name
*/
enum error_code {
- /* Core functions */
- _ERROR_CODE( ERR_CALLOC, 0x000100, NONE ),
+ _ERR_INVALID = 0x000000,
- /* Network resolver errors */
- _ERROR_CODE( ERR_GETADDRINFO, 0x000200, GAI ),
- _ERROR_CODE( ERR_GETADDRINFO_EMPTY, 0x000201, NONE ),
-
- /* Low-level network errors */
- _ERROR_CODE( ERR_SOCKET, 0x000301, ERRNO ),
- _ERROR_CODE( ERR_CONNECT, 0x000302, ERRNO ),
-
- /* Low-level IO errors */
- _ERROR_CODE( ERR_READ, 0x000401, ERRNO ),
- _ERROR_CODE( ERR_READ_EOF, 0x000402, NONE ),
- _ERROR_CODE( ERR_WRITE, 0x000403, ERRNO ),
- _ERROR_CODE( ERR_WRITE_EOF, 0x000404, NONE ),
- _ERROR_CODE( ERR_FCNTL, 0x000405, ERRNO ),
- _ERROR_CODE( ERR_CLOSE, 0x000406, ERRNO ),
+ /** stdlib.h functions */
+ _ERR_STDLIB = 0x000100,
+ ERR_CALLOC,
+
+ /** DNS resolver */
+ _ERR_RESOLVER = 0x000200,
+ ERR_GETADDRINFO,
+ ERR_GETADDRINFO_EMPTY,
+
+ /** @see enum sock_error_code*/
+ _ERR_SOCK = 0x000300,
- /* GnuTLS errors */
- _ERROR_CODE( ERR_GNUTLS_CERT_ALLOC_CRED, 0x010101, GNUTLS ),
- _ERROR_CODE( ERR_GNUTLS_GLOBAL_INIT, 0x010102, GNUTLS ),
- _ERROR_CODE( ERR_GNUTLS_INIT, 0x010103, GNUTLS ),
- _ERROR_CODE( ERR_GNUTLS_SET_DEFAULT_PRIORITY, 0x010104, GNUTLS ),
- _ERROR_CODE( ERR_GNUTLS_CRED_SET, 0x010105, GNUTLS ),
- _ERROR_CODE( ERR_GNUTLS_HANDSHAKE, 0x010106, GNUTLS ),
- _ERROR_CODE( ERR_GNUTLS_RECORD_SEND, 0x010107, GNUTLS ),
- _ERROR_CODE( ERR_GNUTLS_RECORD_RECV, 0x010108, GNUTLS ),
- _ERROR_CODE( ERR_GNUTLS_RECORD_GET_DIRECTION, 0x010109, GNUTLS ),
+ /** @see enum sock_gnutls_error_code */
+ _ERR_GNUTLS = 0x000400,
- /* Libevent errors */
- _ERROR_CODE( ERR_EVENT_NEW, 0x010201, NONE ),
- _ERROR_CODE( ERR_EVENT_ADD, 0x010202, NONE ),
+ /** Libevent errors */
+ _ERR_LIBEVENT = 0x000500,
+ ERR_EVENT_NEW,
+ ERR_EVENT_ADD,
- /* Evsql errors */
- _ERROR_CODE( ERR_EVSQL_NEW_PQ, 0x010301, NONE ),
+ /** Evsql errors */
+ _ERR_EVSQL = 0x000600,
+ ERR_EVSQL_NEW_PQ,
- /* irc_line errors */
- _ERROR_CODE( ERR_LINE_TOO_LONG, 0x100101, NONE ),
- _ERROR_CODE( ERR_LINE_INVALID_TOKEN, 0x100102, NONE ),
+ /** irc_line errors */
+ _ERR_IRC_LINE = 0x000700,
+ ERR_LINE_TOO_LONG,
+ ERR_LINE_INVALID_TOKEN,
/** irc_conn errors */
- _ERROR_CODE( ERR_IRC_CONN_REGISTER_STATE, 0x100201, NONE ),
-
- // mask of bits used for the error_code value
- _ERROR_CODE_MASK = 0xffffff,
+ _ERR_IRC_CONN = 0x000800,
+ ERR_IRC_CONN_REGISTER_STATE,
+};
+
+/**
+ * Table of error descriptions
+ */
+struct error_desc {
+ /** The flat error code */
+ err_t code;
+
+ /** The short name */
+ const char *name;
+
+ /** How to interpret .extra */
+ enum error_extra_types extra_type;
};
/*