46 _ERROR_CODE( ERR_SOCKET, 0x000301, ERRNO ), |
46 _ERROR_CODE( ERR_SOCKET, 0x000301, ERRNO ), |
47 _ERROR_CODE( ERR_CONNECT, 0x000302, ERRNO ), |
47 _ERROR_CODE( ERR_CONNECT, 0x000302, ERRNO ), |
48 |
48 |
49 /* Low-level IO errors */ |
49 /* Low-level IO errors */ |
50 _ERROR_CODE( ERR_READ, 0x000401, ERRNO ), |
50 _ERROR_CODE( ERR_READ, 0x000401, ERRNO ), |
51 _ERROR_CODE( ERR_WRITE, 0x000402, ERRNO ), |
51 _ERROR_CODE( ERR_READ_EOF, 0x000402, NONE ), |
|
52 _ERROR_CODE( ERR_WRITE, 0x000403, ERRNO ), |
52 |
53 |
53 /* GnuTLS errors */ |
54 /* GnuTLS errors */ |
54 _ERROR_CODE( ERR_GNUTLS_CERT_ALLOC_CRED, 0x010101, GNUTLS ), |
55 _ERROR_CODE( ERR_GNUTLS_CERT_ALLOC_CRED, 0x010101, GNUTLS ), |
55 _ERROR_CODE( ERR_GNUTLS_GLOBAL_INIT, 0x010102, GNUTLS ), |
56 _ERROR_CODE( ERR_GNUTLS_GLOBAL_INIT, 0x010102, GNUTLS ), |
56 _ERROR_CODE( ERR_GNUTLS_INIT, 0x010103, GNUTLS ), |
57 _ERROR_CODE( ERR_GNUTLS_INIT, 0x010103, GNUTLS ), |
86 /* |
87 /* |
87 * Translate an error_info into a message. |
88 * Translate an error_info into a message. |
88 * |
89 * |
89 * This is returned as a pointer into a statically allocated buffer. It is not re-entrant. |
90 * This is returned as a pointer into a statically allocated buffer. It is not re-entrant. |
90 */ |
91 */ |
91 const char *error_msg (struct error_info *err); |
92 const char *error_msg (const struct error_info *err); |
92 |
93 |
93 /** No error, evaulates as logical false */ |
94 /** No error, evaulates as logical false */ |
94 #define SUCCESS (0) |
95 #define SUCCESS (0) |
95 |
96 |
96 /* Evaulates to error_info.code as lvalue */ |
97 /* Evaulates to error_info.code as lvalue */ |
121 |
122 |
122 /* Same as above, but also return err_code from func. XXX: use 'return SET_ERROR...' instead */ |
123 /* Same as above, but also return err_code from func. XXX: use 'return SET_ERROR...' instead */ |
123 #define RETURN_SET_ERROR(err_info_ptr, err_code) do { SET_ERROR(err_info_ptr, err_code); return (err_code); } while (0) |
124 #define RETURN_SET_ERROR(err_info_ptr, err_code) do { SET_ERROR(err_info_ptr, err_code); return (err_code); } while (0) |
124 #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) |
125 #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) |
125 #define RETURN_SET_ERROR_ERRNO(err_info_ptr, err_code) do { _SET_ERROR_ERRNO(err_info_ptr, err_code); return (err_code); } while (0) |
126 #define RETURN_SET_ERROR_ERRNO(err_info_ptr, err_code) do { _SET_ERROR_ERRNO(err_info_ptr, err_code); return (err_code); } while (0) |
|
127 #define RETURN_SET_ERROR_INFO(err_info_ptr, from_ptr) do { SET_ERROR_INFO(err_info_ptr, from_ptr); return (from_ptr->code); } while (0) |
126 |
128 |
127 /* Same as above, but also do a 'goto error' */ |
129 /* Same as above, but also do a 'goto error' */ |
128 #define JUMP_SET_ERROR(err_info_ptr, err_code) do { SET_ERROR(err_info_ptr, err_code); goto error; } while (0) |
130 #define JUMP_SET_ERROR(err_info_ptr, err_code) do { SET_ERROR(err_info_ptr, err_code); goto error; } while (0) |
129 #define JUMP_SET_ERROR_INFO(err_info_ptr, from_ptr) do { SET_ERROR_INFO(err_info_ptr, from_ptr); goto error; } while (0) |
131 #define JUMP_SET_ERROR_INFO(err_info_ptr, from_ptr) do { SET_ERROR_INFO(err_info_ptr, from_ptr); goto error; } while (0) |
130 |
132 |