core: add error reporting api
This commit is contained in:
1036
core/error.c
Normal file
1036
core/error.c
Normal file
File diff suppressed because it is too large
Load Diff
36
core/error.h
Normal file
36
core/error.h
Normal file
@@ -0,0 +1,36 @@
|
||||
#ifndef _BLUELIB_ERROR_H_
|
||||
#define _BLUELIB_ERROR_H_
|
||||
|
||||
#include <blue/core/error.h>
|
||||
|
||||
struct b_error_stack_frame {
|
||||
b_queue_entry f_entry;
|
||||
const char *f_file;
|
||||
unsigned int f_line_number;
|
||||
const char *f_function;
|
||||
};
|
||||
|
||||
struct b_error_submsg {
|
||||
b_queue_entry msg_entry;
|
||||
b_error_submsg_type msg_type;
|
||||
char *msg_content;
|
||||
const struct b_error_msg *msg_msg;
|
||||
struct b_error_template_parameter msg_params[B_ERROR_TEMPLATE_PARAMETER_MAX];
|
||||
};
|
||||
|
||||
struct b_error {
|
||||
const struct b_error_vendor *err_vendor;
|
||||
b_error_status_code err_code;
|
||||
|
||||
const struct b_error_definition *err_def;
|
||||
const struct b_error_msg *err_msg;
|
||||
char *err_description;
|
||||
struct b_error_template_parameter err_params[B_ERROR_TEMPLATE_PARAMETER_MAX];
|
||||
|
||||
struct b_queue err_submsg;
|
||||
struct b_queue err_stack;
|
||||
b_queue_entry err_entry;
|
||||
struct b_error *err_caused_by;
|
||||
};
|
||||
|
||||
#endif
|
||||
411
core/include/blue/core/error.h
Normal file
411
core/include/blue/core/error.h
Normal file
@@ -0,0 +1,411 @@
|
||||
#ifndef BLUELIB_CORE_ERROR_H_
|
||||
#define BLUELIB_CORE_ERROR_H_
|
||||
|
||||
#include <blue/core/misc.h>
|
||||
#include <blue/core/queue.h>
|
||||
#include <blue/core/status.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#define B_ERROR_TEMPLATE_PARAMETER_MAX 4
|
||||
#define B_ERROR_MSG_ID_INVALID ((unsigned long)-1)
|
||||
|
||||
#define B_CATCH(err, expr) ((err = (expr)) != NULL)
|
||||
|
||||
#define b_result_is_error(result) ((result) != NULL)
|
||||
#define b_result_is_success(result) ((result) == NULL)
|
||||
|
||||
#define B_RESULT_SUCCESS ((b_result)NULL)
|
||||
#define B_RESULT_ERR(err_name) \
|
||||
b_error_with_code(b_error_vendor_get_builtin(), B_ERR_##err_name)
|
||||
#define B_RESULT_ERR_WITH_STRING(err_name, ...) \
|
||||
b_error_with_string( \
|
||||
b_error_vendor_get_builtin(), B_ERR_##err_name, __VA_ARGS__)
|
||||
#define B_RESULT_STATUS(code) \
|
||||
((code) == B_SUCCESS \
|
||||
? B_RESULT_SUCCESS \
|
||||
: (b_error_with_code(b_error_vendor_get_builtin(), code)))
|
||||
#define B_RESULT_STATUS_WITH_STRING(code, ...) \
|
||||
((code) == B_SUCCESS \
|
||||
? B_RESULT_SUCCESS \
|
||||
: (b_error_with_string( \
|
||||
b_error_vendor_get_builtin(), code, __VA_ARGS__)))
|
||||
|
||||
#define B_ERRORS_BUILTIN (b_error_vendor_get_builtin())
|
||||
#define B_ERRORS_ERRNO (b_error_vendor_get_errno())
|
||||
|
||||
#define B_ERROR_PARAM(name, value) \
|
||||
(b_error_template_parameter) \
|
||||
{ \
|
||||
.param_name = (name), .param_value = (uintptr_t)(value), \
|
||||
}
|
||||
|
||||
#define B_ERROR_TEMPLATE_PARAM(name, type, format) \
|
||||
(b_error_template_parameter_definition) \
|
||||
{ \
|
||||
.param_name = (name), .param_type = (type), \
|
||||
.param_format = (format), \
|
||||
}
|
||||
#define B_ERROR_DEFINITION(code, name, msg) \
|
||||
[code] = (b_error_definition) \
|
||||
{ \
|
||||
.err_name = (name), .err_message = (msg), \
|
||||
}
|
||||
#define B_ERROR_DEFINITION_TEMPLATE(code, name, msg, ...) \
|
||||
[code] = (b_error_definition) \
|
||||
{ \
|
||||
.err_name = (name), .err_message = (msg), \
|
||||
.err_params = __VA_ARGS__, \
|
||||
}
|
||||
|
||||
#define B_ERROR_MSG(id, content) \
|
||||
[id] = (b_error_msg) \
|
||||
{ \
|
||||
.msg_message = (content), \
|
||||
}
|
||||
#define B_ERROR_MSG_TEMPLATE(id, content, ...) \
|
||||
[id] = (b_error_msg) \
|
||||
{ \
|
||||
.msg_message = (content), .msg_params = __VA_ARGS__, \
|
||||
}
|
||||
|
||||
#define z__b_error_create_status(status_code) \
|
||||
(z__b_error_create( \
|
||||
b_error_vendor_get_builtin(), status_code, NULL, NULL, 0, \
|
||||
NULL, NULL))
|
||||
|
||||
/* Error creation macros */
|
||||
#define b_error_with_code(vendor, code) \
|
||||
(z__b_error_create( \
|
||||
vendor, code, NULL, __FILE__, __LINE__, __FUNCTION__, NULL))
|
||||
#define b_error_caused_by_error(vendor, code, cause_error) \
|
||||
(z__b_error_create( \
|
||||
vendor, code, cause_error, __FILE__, __LINE__, __FUNCTION__, NULL))
|
||||
#define b_error_caused_by_status(vendor, code, cause_status) \
|
||||
(z__b_error_create( \
|
||||
vendor, code, z__b_error_create_status(cause_status), \
|
||||
__FILE__, __LINE__, __FUNCTION__, NULL))
|
||||
#define b_error_caused_by_code(vendor, code, cause_vendor, cause_code) \
|
||||
(z__b_error_create( \
|
||||
vendor, code, z__b_error_with_code(cause_vendor, cause_code), \
|
||||
__FILE__, __LINE__, __FUNCTION__, NULL))
|
||||
#define b_error_with_string(vendor, code, ...) \
|
||||
(z__b_error_create( \
|
||||
vendor, code, NULL, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__))
|
||||
#define b_error_with_string_caused_by_error(vendor, code, cause_error, ...) \
|
||||
(z__b_error_create( \
|
||||
vendor, code, cause_error, __FILE__, __LINE__, __FUNCTION__, \
|
||||
__VA_ARGS__))
|
||||
#define b_error_with_string_caused_by_status(vendor, code, cause_status, ...) \
|
||||
(z__b_error_create( \
|
||||
vendor, code, z__b_error_create_status(cause_status), \
|
||||
__FILE__, __LINE__, __FUNCTION__, __VA_ARGS__))
|
||||
#define b_error_with_msg(vendor, code, msg_id) \
|
||||
(z__b_error_create_msg( \
|
||||
vendor, code, NULL, __FILE__, __LINE__, __FUNCTION__, msg_id, \
|
||||
(b_error_template_parameter[]) {{}}))
|
||||
#define b_error_with_msg_caused_by_error(vendor, code, cause_error, msg_id) \
|
||||
(z__b_error_create_msg( \
|
||||
vendor, code, cause_error, __FILE__, __LINE__, __FUNCTION__, \
|
||||
msg_id, (b_error_template_parameter[]) {{}}))
|
||||
#define b_error_with_msg_caused_by_status(vendor, code, cause_status, msg_id) \
|
||||
(z__b_error_create_msg( \
|
||||
vendor, code, z__b_error_create_status(cause_status), \
|
||||
__FILE__, __LINE__, __FUNCTION__, msg_id, \
|
||||
(b_error_template_parameter[]) {{}}))
|
||||
#define b_error_with_msg_template(vendor, code, msg_id, ...) \
|
||||
(z__b_error_create_msg( \
|
||||
vendor, code, NULL, __FILE__, __LINE__, __FUNCTION__, msg_id, \
|
||||
(b_error_template_parameter[]) {__VA_ARGS__, {}}))
|
||||
#define b_error_with_msg_template_caused_by_error( \
|
||||
vendor, code, cause_error, msg_id, ...) \
|
||||
(z__b_error_create_msg( \
|
||||
vendor, code, cause_error, __FILE__, __LINE__, __FUNCTION__, \
|
||||
msg_id, (b_error_template_parameter[]) {__VA_ARGS__, {}}))
|
||||
#define b_error_with_msg_template_caused_by_status( \
|
||||
vendor, code, cause_status, msg_id, ...) \
|
||||
(z__b_error_create_msg( \
|
||||
vendor, code, z__b_error_create_status(cause_status), \
|
||||
__FILE__, __LINE__, __FUNCTION__, msg_id, \
|
||||
(b_error_template_parameter[]) {__VA_ARGS__, {}}))
|
||||
#define b_error_with_template(vendor, code, ...) \
|
||||
(z__b_error_create_template( \
|
||||
vendor, code, NULL, __FILE__, __LINE__, __FUNCTION__, \
|
||||
(b_error_template_parameter[]) {__VA_ARGS__, {}}))
|
||||
#define b_error_with_template_caused_by_error(vendor, code, cause_error, ...) \
|
||||
(z__b_error_create_template( \
|
||||
vendor, code, cause_error, __FILE__, __LINE__, __FUNCTION__, \
|
||||
(b_error_template_parameter[]) {__VA_ARGS__, {}}))
|
||||
#define b_error_with_template_caused_by_status(vendor, code, cause_status, ...) \
|
||||
(z__b_error_create_template( \
|
||||
vendor, code, z__b_error_create_status(cause_status), \
|
||||
__FILE__, __LINE__, __FUNCTION__, \
|
||||
(b_error_template_parameter[]) {__VA_ARGS__, {}}))
|
||||
|
||||
/* Error propagation macros */
|
||||
#define b_result_propagate(err) \
|
||||
(z__b_error_propagate(err, __FILE__, __LINE__, __FUNCTION__))
|
||||
#define b_error_caused_by(err, caused_by) (z__b_error_caused_by(err, caused_by))
|
||||
#define b_error_caused_by_b_status(err, status) \
|
||||
(z__b_error_caused_by_b_status(err, status))
|
||||
#define b_error_replace(err, caused_by) \
|
||||
(z__b_error_propagate(err, __FILE__, __LINE__, __FUNCTION__))
|
||||
|
||||
/* Error throw macros */
|
||||
#define z__b_throw(err) (z__b_error_throw(err, NULL, 0, NULL))
|
||||
#define b_throw(err) (z__b_error_throw(err, __FILE__, __LINE__, __FUNCTION__))
|
||||
#define b_throw_status(status) \
|
||||
(z__b_error_throw( \
|
||||
z__b_error_create( \
|
||||
b_error_vendor_get_builtin(), status, NULL, NULL, 0, \
|
||||
NULL, NULL), \
|
||||
__FILE__, __LINE__, __FUNCTION__))
|
||||
|
||||
#define b_throw_status_string(status, ...) \
|
||||
(z__b_error_throw( \
|
||||
z__b_error_create( \
|
||||
b_error_vendor_get_builtin(), status, NULL, NULL, 0, \
|
||||
NULL, __VA_ARGS__), \
|
||||
__FILE__, __LINE__, __FUNCTION__))
|
||||
#define b_throw_error_code(vendor, code) \
|
||||
z__b_throw(b_error_with_code(vendor, code))
|
||||
#define b_throw_error_caused_by_error(vendor, code, cause) \
|
||||
z__b_throw(b_error_caused_by_error(vendor, code, cause))
|
||||
#define b_throw_error_caused_by_status(vendor, code, cause) \
|
||||
z__b_throw(b_error_caused_by_status(vendor, code, cause))
|
||||
#define b_throw_error_with_string(vendor, code, ...) \
|
||||
z__b_throw(b_error_with_string(vendor, code, __VA_ARGS__))
|
||||
#define b_throw_error_with_string_caused_by_error(vendor, code, cause, ...) \
|
||||
z__b_throw(b_error_with_string_caused_by_error( \
|
||||
vendor, code, cause, __VA_ARGS__))
|
||||
#define b_throw_error_with_string_caused_by_status(vendor, code, cause, ...) \
|
||||
z__b_throw(b_error_with_string_caused_by_status( \
|
||||
vendor, code, cause, __VA_ARGS__))
|
||||
|
||||
#define b_throw_error_with_msg(vendor, code, msg_id) \
|
||||
z__b_throw(b_error_with_msg(vendor, code, msg_id))
|
||||
#define b_throw_error_with_msg_caused_by_error(vendor, code, cause, msg_id) \
|
||||
z__b_throw(b_error_with_msg_caused_by_error(vendor, code, cause, msg_id))
|
||||
#define b_throw_error_with_msg_caused_by_status(vendor, code, cause, msg_id) \
|
||||
z__b_throw(b_error_with_msg_caused_by_status(vendor, code, cause, msg_id))
|
||||
|
||||
#define b_throw_error_with_msg_template(vendor, code, msg_id, ...) \
|
||||
z__b_throw(b_error_with_msg_template(vendor, code, msg_id, __VA_ARGS__))
|
||||
#define b_throw_error_with_msg_template_caused_by_error( \
|
||||
vendor, code, cause, msg_id, ...) \
|
||||
z__b_throw(b_error_with_msg_template_caused_by_error( \
|
||||
vendor, code, cause, msg_id, __VA_ARGS__))
|
||||
#define b_throw_error_with_msg_template_caused_by_status( \
|
||||
vendor, code, cause, msg_id, ...) \
|
||||
z__b_throw(b_error_with_msg_template_caused_by_status( \
|
||||
vendor, code, cause, msg_id, __VA_ARGS__))
|
||||
|
||||
#define b_throw_error_with_template(vendor, code, ...) \
|
||||
z__b_throw(b_error_with_template(vendor, code, __VA_ARGS__))
|
||||
#define b_throw_error_with_template_caused_by_error(vendor, code, cause, ...) \
|
||||
z__b_throw(b_error_with_template_caused_by_error( \
|
||||
vendor, code, cause, __VA_ARGS__))
|
||||
#define b_throw_error_with_template_caused_by_status(vendor, code, cause, ...) \
|
||||
z__b_throw(b_error_with_template_caused_by_status( \
|
||||
vendor, code, cause, __VA_ARGS__))
|
||||
|
||||
#define B_ERR_MSG(s) \
|
||||
{ \
|
||||
.msg_type = B_ERROR_MESSAGE_ERROR, .msg_content = (s), \
|
||||
}
|
||||
#define B_ERR_MSG_WARN(s) \
|
||||
{ \
|
||||
.msg_type = B_ERROR_MESSAGE_WARN, .msg_content = (s), \
|
||||
}
|
||||
#define B_ERR_MSG_INFO(s) \
|
||||
{ \
|
||||
.msg_type = B_ERROR_MESSAGE_INFO, .msg_content = (s), \
|
||||
}
|
||||
#define B_ERR_MSG_END(s) \
|
||||
{ \
|
||||
.msg_type = B_ERROR_MESSAGE_NONE, .msg_content = NULL, \
|
||||
}
|
||||
|
||||
typedef enum b_error_submsg_type {
|
||||
B_ERROR_SUBMSG_NONE = 0,
|
||||
B_ERROR_SUBMSG_ERROR,
|
||||
B_ERROR_SUBMSG_WARNING,
|
||||
B_ERROR_SUBMSG_INFO,
|
||||
} b_error_submsg_type;
|
||||
|
||||
typedef enum b_error_report_flags {
|
||||
B_ERROR_REPORT_NONE = 0,
|
||||
B_ERROR_REPORT_STATUS = 0x01u,
|
||||
B_ERROR_REPORT_DESCRIPTION = 0x02u,
|
||||
B_ERROR_REPORT_SUBMSG = 0x04u,
|
||||
B_ERROR_REPORT_STACK_TRACE = 0x08u,
|
||||
B_ERROR_REPORT_CAUSE = 0x10u,
|
||||
|
||||
B_ERROR_REPORT_MINIMAL = B_ERROR_REPORT_STATUS | B_ERROR_REPORT_DESCRIPTION,
|
||||
B_ERROR_REPORT_DEFAULT = B_ERROR_REPORT_MINIMAL | B_ERROR_REPORT_SUBMSG
|
||||
| B_ERROR_REPORT_CAUSE,
|
||||
B_ERROR_REPORT_ALL = B_ERROR_REPORT_DEFAULT | B_ERROR_REPORT_STACK_TRACE,
|
||||
} b_error_report_flags;
|
||||
|
||||
typedef enum b_error_template_parameter_type {
|
||||
B_ERROR_TEMPLATE_PARAM_NONE = 0,
|
||||
B_ERROR_TEMPLATE_PARAM_STRING,
|
||||
B_ERROR_TEMPLATE_PARAM_CHAR,
|
||||
B_ERROR_TEMPLATE_PARAM_INT,
|
||||
B_ERROR_TEMPLATE_PARAM_UINT,
|
||||
B_ERROR_TEMPLATE_PARAM_LONG,
|
||||
B_ERROR_TEMPLATE_PARAM_ULONG,
|
||||
B_ERROR_TEMPLATE_PARAM_LONGLONG,
|
||||
B_ERROR_TEMPLATE_PARAM_ULONGLONG,
|
||||
B_ERROR_TEMPLATE_PARAM_SIZE_T,
|
||||
B_ERROR_TEMPLATE_PARAM_INTPTR,
|
||||
B_ERROR_TEMPLATE_PARAM_UINTPTR,
|
||||
B_ERROR_TEMPLATE_PARAM_PTR,
|
||||
} b_error_template_parameter_type;
|
||||
|
||||
typedef struct b_error_template_parameter_definition {
|
||||
const char *param_name;
|
||||
b_error_template_parameter_type param_type;
|
||||
const char *param_format;
|
||||
} b_error_template_parameter_definition;
|
||||
|
||||
typedef struct b_error_template_parameter {
|
||||
const char *param_name;
|
||||
uintptr_t param_value;
|
||||
const struct b_error_template_parameter_definition *__param_def;
|
||||
} b_error_template_parameter;
|
||||
|
||||
struct b_error_vendor;
|
||||
|
||||
typedef struct b_error b_error;
|
||||
typedef struct b_error *b_result;
|
||||
typedef struct b_error_submsg b_error_submsg;
|
||||
typedef struct b_error_stack_frame b_error_stack_frame;
|
||||
typedef long b_error_status_code;
|
||||
typedef unsigned long b_error_msg_id;
|
||||
|
||||
typedef struct b_error_definition {
|
||||
const char *err_name;
|
||||
const char *err_message;
|
||||
const b_error_template_parameter_definition err_params[B_ERROR_TEMPLATE_PARAMETER_MAX];
|
||||
} b_error_definition;
|
||||
|
||||
typedef struct b_error_msg {
|
||||
const char *msg_message;
|
||||
const b_error_template_parameter_definition msg_params[B_ERROR_TEMPLATE_PARAMETER_MAX];
|
||||
} b_error_msg;
|
||||
|
||||
typedef const b_error_definition *(*b_error_status_code_get_definition)(
|
||||
const struct b_error_vendor *, b_error_status_code);
|
||||
typedef const b_error_msg *(*b_error_msg_get_definition)(
|
||||
const struct b_error_vendor *, b_error_msg_id);
|
||||
typedef void (*b_error_report_function)(
|
||||
const struct b_error *, b_error_report_flags);
|
||||
|
||||
typedef struct b_error_vendor {
|
||||
const char *v_name;
|
||||
|
||||
b_error_status_code_get_definition v_status_get_definition;
|
||||
b_error_msg_get_definition v_msg_get_definition;
|
||||
|
||||
const b_error_definition *v_error_definitions;
|
||||
size_t v_error_definitions_length;
|
||||
|
||||
const b_error_msg *v_msg;
|
||||
size_t v_msg_length;
|
||||
} b_error_vendor;
|
||||
|
||||
BLUE_API b_error *z__b_error_create_template(
|
||||
const b_error_vendor *, b_error_status_code, b_error *, const char *,
|
||||
unsigned int, const char *, const b_error_template_parameter[]);
|
||||
BLUE_API b_error *z__b_error_create_string(
|
||||
const b_error_vendor *, b_error_status_code, b_error *, const char *,
|
||||
unsigned int, const char *, const char *, va_list);
|
||||
BLUE_API b_error *z__b_error_create_msg(
|
||||
const b_error_vendor *, b_error_status_code, b_error *, const char *,
|
||||
unsigned int, const char *, b_error_msg_id,
|
||||
const b_error_template_parameter[]);
|
||||
BLUE_API b_error *z__b_error_propagate(
|
||||
b_error *, const char *, unsigned int, const char *);
|
||||
BLUE_API b_error *z__b_error_caused_by(b_error *, b_error *);
|
||||
BLUE_API b_error *z__b_error_caused_by_b_status(b_error *, b_status);
|
||||
BLUE_API void z__b_error_throw(b_error *, const char *, unsigned int, const char *);
|
||||
|
||||
BLUE_API const b_error_vendor *b_error_vendor_get_builtin(void);
|
||||
BLUE_API const b_error_vendor *b_error_vendor_get_errno(void);
|
||||
BLUE_API const b_error_definition *b_error_vendor_get_error_definition(
|
||||
const b_error_vendor *vendor, b_error_status_code code);
|
||||
BLUE_API const char *b_error_vendor_get_status_code_name(
|
||||
const b_error_vendor *vendor, b_error_status_code code);
|
||||
BLUE_API const char *b_error_vendor_get_status_code_description(
|
||||
const b_error_vendor *vendor, b_error_status_code code);
|
||||
BLUE_API const b_error_msg *b_error_vendor_get_msg(
|
||||
const b_error_vendor *vendor, b_error_msg_id msg_id);
|
||||
|
||||
static inline b_error *z__b_error_create(
|
||||
const b_error_vendor *v, b_error_status_code c, b_error *c2,
|
||||
const char *f0, unsigned int l, const char *f1, const char *d, ...)
|
||||
{
|
||||
va_list arg;
|
||||
va_start(arg, d);
|
||||
b_error *err = z__b_error_create_string(v, c, c2, f0, l, f1, d, arg);
|
||||
va_end(arg);
|
||||
return err;
|
||||
}
|
||||
|
||||
BLUE_API enum b_status b_error_add_submsg_string(
|
||||
b_error *error, b_error_submsg_type type, const char *msg, ...);
|
||||
BLUE_API enum b_status z__b_error_add_submsg_template(
|
||||
b_error *error, b_error_submsg_type type, b_error_msg_id msg_id,
|
||||
b_error_template_parameter param[]);
|
||||
#define b_error_add_submsg(error, type, msg_id) \
|
||||
(z__b_error_add_submsg_template( \
|
||||
error, type, msg_id, (b_error_template_parameter[]) {{}}))
|
||||
#define b_error_add_submsg_template(error, type, msg_id, ...) \
|
||||
(z__b_error_add_submsg_template( \
|
||||
error, type, msg_id, \
|
||||
(b_error_template_parameter[]) {__VA_ARGS__, {}}))
|
||||
|
||||
BLUE_API void b_error_release(b_error *error);
|
||||
|
||||
BLUE_API b_error_status_code b_error_get_status_code(const b_error *error);
|
||||
BLUE_API const b_error_vendor *b_error_get_vendor(const b_error *error);
|
||||
BLUE_API const b_error_definition *b_error_get_definition(const b_error *error);
|
||||
BLUE_API const b_error_template_parameter *b_error_get_template_parameter(
|
||||
const b_error *error, const char *param_name);
|
||||
BLUE_API const b_error_template_parameter *b_error_get_template_parameters(
|
||||
const b_error *error);
|
||||
BLUE_API const char *b_error_get_description(const b_error *error);
|
||||
BLUE_API const b_error_msg *b_error_get_msg(const b_error *error);
|
||||
BLUE_API const b_error_submsg *b_error_get_first_submsg(const b_error *error);
|
||||
BLUE_API const b_error_submsg *b_error_get_next_submsg(
|
||||
const b_error *error, const b_error_submsg *msg);
|
||||
BLUE_API const b_error_stack_frame *b_error_get_first_stack_frame(
|
||||
const b_error *error);
|
||||
BLUE_API const b_error_stack_frame *b_error_get_next_stack_frame(
|
||||
const b_error *error, const b_error_stack_frame *frame);
|
||||
BLUE_API const b_error *b_error_get_caused_by(const b_error *error);
|
||||
|
||||
BLUE_API b_error_submsg_type b_error_submsg_get_type(const b_error_submsg *msg);
|
||||
BLUE_API const char *b_error_submsg_get_content(const b_error_submsg *msg);
|
||||
BLUE_API const b_error_msg *b_error_submsg_get_msg(const b_error_submsg *msg);
|
||||
BLUE_API const b_error_template_parameter *b_error_submsg_get_template_parameters(
|
||||
const b_error_submsg *msg);
|
||||
|
||||
BLUE_API const char *b_error_stack_frame_get_filepath(
|
||||
const b_error_stack_frame *frame);
|
||||
BLUE_API unsigned int b_error_stack_frame_get_line_number(
|
||||
const b_error_stack_frame *frame);
|
||||
BLUE_API const char *b_error_stack_frame_get_function_name(
|
||||
const b_error_stack_frame *frame);
|
||||
|
||||
BLUE_API const b_error_template_parameter_definition *b_error_definition_get_template_parameter(
|
||||
const b_error_definition *error_def, const char *param_name);
|
||||
|
||||
BLUE_API const char *b_error_msg_get_content(const b_error_msg *msg);
|
||||
BLUE_API const b_error_template_parameter_definition *b_error_msg_get_template_parameter(
|
||||
const b_error_msg *msg, const char *param_name);
|
||||
|
||||
BLUE_API void b_set_error_report_function(
|
||||
b_error_report_function func, b_error_report_flags flags);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user