src/error.h
changeset 30 7f8dd120933f
parent 29 3f0f2898fea3
child 34 763f65f9df0c
--- 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;
 };
 
 /*