summaryrefslogtreecommitdiffhomepage
path: root/libfdt/libfdt_strerror.c
diff options
context:
space:
mode:
authorAmlal <amlal.elmahrouss@icloud.com>2025-01-21 20:32:19 +0100
committerAmlal <amlal.elmahrouss@icloud.com>2025-01-21 20:32:19 +0100
commit046d884b50c32cacd3523071541e7e38241083f3 (patch)
tree92ce6fd53e0c031c569270b04aefa8fc0aa1e074 /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.c75
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>");
+}