src/error.h
changeset 4 a3ca0f97a075
parent 3 cc94ae754e2a
child 5 a09a0797f6f0
equal deleted inserted replaced
3:cc94ae754e2a 4:a3ca0f97a075
    14 
    14 
    15 /*
    15 /*
    16  * List of defined error codes, organized mostly by function name
    16  * List of defined error codes, organized mostly by function name
    17  */
    17  */
    18 enum error_code {
    18 enum error_code {
       
    19     /* Core functions */
    19     ERR_CALLOC                  = 0x000100,
    20     ERR_CALLOC                  = 0x000100,
    20     
    21     
    21     // network resolver errors
    22     /* Network resolver errors */
    22     ERR_GETADDRINFO             = 0x000200,
    23     ERR_GETADDRINFO             = 0x000200,
    23     ERR_GETADDRINFO_EMPTY       = 0x000201,     /* No valid results */
    24     ERR_GETADDRINFO_EMPTY       = 0x000201,     /* No valid results */
    24 
    25 
    25     // low-level network errors
    26     /* Low-level network errors */
    26     ERR_SOCKET                  = 0x000301,
    27     ERR_SOCKET                  = 0x000301,
    27     ERR_CONNECT                 = 0x000302,
    28     ERR_CONNECT                 = 0x000302,
    28 
    29 
    29     // low-level IO errors
    30     /* Low-level IO errors */
    30     ERR_READ                    = 0x000401,
    31     ERR_READ                    = 0x000401,
    31     ERR_WRITE                   = 0x000402,
    32     ERR_WRITE                   = 0x000402,
       
    33 
       
    34     /* GnuTLS errors */
       
    35     ERR_GNUTLS_CERT_ALLOC_CRED  = 0x010101,
       
    36     ERR_GNUTLS_GLOBAL_INIT      = 0x010102,
    32 };
    37 };
    33 
    38 
    34 /*
    39 /*
    35  * An error code and associated extra infos
    40  * An error code and associated extra infos
    36  */
    41  */
    44 
    49 
    45 /** No error, evaulates as logical false */
    50 /** No error, evaulates as logical false */
    46 #define SUCCESS (0)
    51 #define SUCCESS (0)
    47 
    52 
    48 /* Evaulates to error_info.code as lvalue */
    53 /* Evaulates to error_info.code as lvalue */
    49 #define ERROR_CODE(err_info) ((err_info).code)
    54 #define ERROR_CODE(err_info_ptr) ((err_info_ptr)->code)
    50 
    55 
    51 /* Evaulates to error_info.extra as lvalue */
    56 /* Evaulates to error_info.extra as lvalue */
    52 #define ERROR_EXTRA(err_info) ((err_info).extra)
    57 #define ERROR_EXTRA(err_info_ptr) ((err_info_ptr)->extra)
    53 
    58 
    54 /* Set error_info.code to SUCCESS, evaulates as zero */
    59 /* Set error_info.code to SUCCESS, evaulates as zero */
    55 #define RESET_ERROR(err_info) ((err_info).code = SUCCESS)
    60 #define RESET_ERROR(err_info_ptr) ((err_info_ptr)->code = SUCCESS)
    56 
    61 
    57 /* Compare error_info.code != 0 */
    62 /* Compare error_info.code != 0 */
    58 #define IS_ERROR(err_info) (!!(err_info).code)
    63 #define IS_ERROR(err_info_ptr) (!!(err_info_ptr)->code)
    59 
    64 
    60 /* Set error_info.code, but leave err_extra as-is. Evaluates to err_code */
    65 /* Set error_info.code, but leave err_extra as-is. Evaluates to err_code */
    61 #define SET_ERROR(err_info, err_code) ((err_info).code = (err_code))
    66 #define SET_ERROR(err_info_ptr, err_code) ((err_info_ptr)->code = (err_code))
    62 
    67 
    63 /* Set error_info.code/extra. XXX: should evaluate to err_code */
    68 /* Set error_info.code/extra. XXX: should evaluate to err_code */
    64 #define _SET_ERROR_EXTRA(err_info, err_code, err_extra) (err_info).code = (err_code); err_info.extra = (err_extra)
    69 #define _SET_ERROR_EXTRA(err_info_ptr, err_code, err_extra) (err_info_ptr)->code = (err_code); (err_info_ptr)->extra = (err_extra)
    65 #define SET_ERROR_EXTRA(err_info, err_code, err_extra) do { _SET_ERROR_EXTRA(err_info, err_code, err_extra); } while (0)
    70 #define SET_ERROR_EXTRA(err_info_ptr, err_code, err_extra) do { _SET_ERROR_EXTRA(err_info_ptr, err_code, err_extra); } while (0)
    66 
    71 
    67 /* Set error.info.code to err_code, and .extra to errno. XXX: should evaulate to err_code */
    72 /* Set error.info.code to err_code, and .extra to errno. XXX: should evaulate to err_code */
    68 #define _SET_ERROR_ERRNO(err_info, err_code) _SET_ERROR_EXTRA(err_info, err_code, errno);
    73 #define _SET_ERROR_ERRNO(err_info_ptr, err_code) _SET_ERROR_EXTRA(err_info_ptr, err_code, errno);
    69 #define SET_ERROR_ERRNO(err_info, err_code) SET_ERROR_EXTRA(err_info, err_code, errno);
    74 #define SET_ERROR_ERRNO(err_info_ptr, err_code) SET_ERROR_EXTRA(err_info_ptr, err_code, errno);
    70 
    75 
    71 /* Ss above, but also return err_code from func. XXX: use 'return SET_ERROR...' instead */
    76 /* Ss above, but also return err_code from func. XXX: use 'return SET_ERROR...' instead */
    72 #define RETURN_SET_ERROR(err_info, err_code) do { _SET_ERROR(err_info, err_code); return (err_code); } while (0)
    77 #define RETURN_SET_ERROR(err_info_ptr, err_code) do { _SET_ERROR(err_info_ptr, err_code); return (err_code); } while (0)
    73 #define RETURN_SET_ERROR_EXTRA(err_info, err_code, err_extra) do { _SET_ERROR_EXTRA(err_info, err_code, err_extra); return (err_code); } while (0)
    78 #define RETURN_SET_ERROR_EXTRA(err_info_ptr, err_code, err_extra) do { _SET_ERROR_EXTRA(err_info_ptr, err_code, err_extra); return (err_code); } while (0)
    74 #define RETURN_SET_ERROR_ERRNO(err_info, err_code) do { _SET_ERROR_ERRNO(err_info, err_code); return (err_code); } while (0)
    79 #define RETURN_SET_ERROR_ERRNO(err_info_ptr, err_code) do { _SET_ERROR_ERRNO(err_info_ptr, err_code); return (err_code); } while (0)
    75 
    80 
    76 #endif
    81 #endif