72 lines
2.1 KiB
C
72 lines
2.1 KiB
C
#include <blue/core/error.h>
|
|
#include <errno.h>
|
|
#include <ivy/status.h>
|
|
|
|
static const b_error_definition error_defs[] = {
|
|
B_ERROR_DEFINITION(IVY_OK, "OK", "Success"),
|
|
B_ERROR_DEFINITION(IVY_ERR_EOF, "EOF", "Unexpected end of file"),
|
|
B_ERROR_DEFINITION(IVY_ERR_IO_FAILURE, "IO_FAILURE", "I/O failure"),
|
|
B_ERROR_DEFINITION(IVY_ERR_BAD_SYNTAX, "BAD_SYNTAX", "Invalid syntax"),
|
|
B_ERROR_DEFINITION(IVY_ERR_NO_MEMORY, "NO_MEMORY", "Out of memory"),
|
|
B_ERROR_DEFINITION(
|
|
IVY_ERR_NOT_SUPPORTED, "NOT_SUPPORTED",
|
|
"Operation not supported"),
|
|
B_ERROR_DEFINITION(
|
|
IVY_ERR_INTERNAL_FAILURE, "INTERNAL_FAILURE",
|
|
"Internal failure"),
|
|
B_ERROR_DEFINITION(IVY_ERR_BAD_STATE, "BAD_STATE", "Bad state"),
|
|
B_ERROR_DEFINITION(
|
|
IVY_ERR_INVALID_VALUE, "INVALID_VALUE", "Invalid value"),
|
|
B_ERROR_DEFINITION(IVY_ERR_NO_ENTRY, "NO_ENTRY", "Name does not exist"),
|
|
B_ERROR_DEFINITION(
|
|
IVY_ERR_NAME_EXISTS, "NAME_EXISTS", "Name already exists"),
|
|
B_ERROR_DEFINITION(IVY_ERR_BAD_FORMAT, "BAD_FORMAT", "Bad format"),
|
|
B_ERROR_DEFINITION(
|
|
IVY_ERR_PARSE_FAILURE, "PARSE_FAILURE", "Parse failure"),
|
|
B_ERROR_DEFINITION(
|
|
IVY_ERR_CODEGEN_FAILURE, "CODEGEN_FAILURE",
|
|
"Code generation failure"),
|
|
};
|
|
|
|
static const b_error_vendor error_vendor = {
|
|
.v_name = "Ivy",
|
|
.v_error_definitions = error_defs,
|
|
.v_error_definitions_length = sizeof error_defs,
|
|
};
|
|
|
|
const char *ivy_status_to_string(enum ivy_status status)
|
|
{
|
|
return error_defs[status].err_message;
|
|
}
|
|
|
|
const struct b_error_vendor *ivy_error_vendor(void)
|
|
{
|
|
return &error_vendor;
|
|
}
|
|
|
|
#define ENUM_CONVERT(from, to) \
|
|
case (from): \
|
|
return (to)
|
|
|
|
enum ivy_status ivy_status_from_b_status(enum b_status status)
|
|
{
|
|
switch (status) {
|
|
ENUM_CONVERT(B_SUCCESS, IVY_OK);
|
|
ENUM_CONVERT(B_ERR_NAME_EXISTS, IVY_ERR_NAME_EXISTS);
|
|
ENUM_CONVERT(B_ERR_NO_MEMORY, IVY_ERR_NO_MEMORY);
|
|
default:
|
|
return IVY_ERR_INTERNAL_FAILURE;
|
|
}
|
|
}
|
|
|
|
enum ivy_status ivy_status_from_errno(int err)
|
|
{
|
|
switch (err) {
|
|
ENUM_CONVERT(0, IVY_OK);
|
|
ENUM_CONVERT(ENOENT, IVY_ERR_NO_ENTRY);
|
|
ENUM_CONVERT(ENOMEM, IVY_ERR_NO_MEMORY);
|
|
default:
|
|
return IVY_ERR_INTERNAL_FAILURE;
|
|
}
|
|
}
|