diff options
| author | Amlal <amlal.elmahrouss@icloud.com> | 2025-01-21 20:32:19 +0100 |
|---|---|---|
| committer | Amlal <amlal.elmahrouss@icloud.com> | 2025-01-21 20:32:19 +0100 |
| commit | 046d884b50c32cacd3523071541e7e38241083f3 (patch) | |
| tree | 92ce6fd53e0c031c569270b04aefa8fc0aa1e074 /libfdt/libfdt_strerror.c | |
ADD: CoreBoot, also comes with my reimplementation of libfdt, which is just a dumb rewrite.
Signed-off-by: Amlal <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'libfdt/libfdt_strerror.c')
| -rw-r--r-- | libfdt/libfdt_strerror.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/libfdt/libfdt_strerror.c b/libfdt/libfdt_strerror.c new file mode 100644 index 0000000..4002afc --- /dev/null +++ b/libfdt/libfdt_strerror.c @@ -0,0 +1,75 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved. + +------------------------------------------- */ + +#include <libfdt/libfdt_env.h> +#include <libfdt/libfdt.h> + +/***********************************************************************************/ +/* @brief FDT error reporting system */ +/***********************************************************************************/ + +/// @brief Error information structure. +struct fdt_err +{ + const char* e_str; +}; + +#define fdt_error(VAL) \ + [(VAL)] = { \ + .e_str = #VAL, \ + } + +static struct fdt_err mp_fdtErrTbl[] = { + fdt_error(FDT_ERR_NOTFOUND), + fdt_error(FDT_ERR_EXISTS), + fdt_error(FDT_ERR_NOSPACE), + + fdt_error(FDT_ERR_BADOFFSET), + fdt_error(FDT_ERR_BADPATH), + fdt_error(FDT_ERR_BADPHANDLE), + fdt_error(FDT_ERR_BADSTATE), + + fdt_error(FDT_ERR_TRUNCATED), + fdt_error(FDT_ERR_BADMAGIC), + fdt_error(FDT_ERR_BADVERSION), + fdt_error(FDT_ERR_BADSTRUCTURE), + fdt_error(FDT_ERR_BADLAYOUT), + fdt_error(FDT_ERR_INTERNAL), + fdt_error(FDT_ERR_BADNCELLS), + fdt_error(FDT_ERR_BADVALUE), + fdt_error(FDT_ERR_BADOVERLAY), + fdt_error(FDT_ERR_NOPHANDLES), + fdt_error(FDT_ERR_BADFLAGS), + fdt_error(FDT_ERR_ALIGNMENT), +}; + +#define fdt_error_length() mpux_array_size(mp_fdtErrTbl) + +/// @brief Returns the error value as a string. +/// @param errval +/// @return +const char* fdt_strerror(int32_t errval) +{ + if (errval > 0) + { + return ("<valid offset/length>"); + } + else if (errval == 0) + { + return ("<no error>"); + } + else if (-errval < fdt_error_length()) + { + const char* serr = mp_fdtErrTbl[errval].e_str; + + if (serr != null) + { + return serr; + } + } + + return ("<unknown error>"); +} |
