1 // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) 2 /* 3 * libfdt - Flat Device Tree manipulation 4 * Copyright (C) 2006 David Gibson, IBM Corporation. 5 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 6 */ 7 #include "libfdt_env.h" 8 9 #include <fdt.h> 10 #include <libfdt.h> 11 12 #include "libfdt_internal.h" 13 14 struct fdt_errtabent { 15 const char *str; 16 }; 17 18 #define FDT_ERRTABENT(val) \ 19 [(val)] = { .str = #val, } 20 21 static struct fdt_errtabent fdt_errtable[] = { 22 FDT_ERRTABENT(FDT_ERR_NOTFOUND), 23 FDT_ERRTABENT(FDT_ERR_EXISTS), 24 FDT_ERRTABENT(FDT_ERR_NOSPACE), 25 26 FDT_ERRTABENT(FDT_ERR_BADOFFSET), 27 FDT_ERRTABENT(FDT_ERR_BADPATH), 28 FDT_ERRTABENT(FDT_ERR_BADPHANDLE), 29 FDT_ERRTABENT(FDT_ERR_BADSTATE), 30 31 FDT_ERRTABENT(FDT_ERR_TRUNCATED), 32 FDT_ERRTABENT(FDT_ERR_BADMAGIC), 33 FDT_ERRTABENT(FDT_ERR_BADVERSION), 34 FDT_ERRTABENT(FDT_ERR_BADSTRUCTURE), 35 FDT_ERRTABENT(FDT_ERR_BADLAYOUT), 36 FDT_ERRTABENT(FDT_ERR_INTERNAL), 37 FDT_ERRTABENT(FDT_ERR_BADNCELLS), 38 FDT_ERRTABENT(FDT_ERR_BADVALUE), 39 FDT_ERRTABENT(FDT_ERR_BADOVERLAY), 40 FDT_ERRTABENT(FDT_ERR_NOPHANDLES), 41 FDT_ERRTABENT(FDT_ERR_BADFLAGS), 42 FDT_ERRTABENT(FDT_ERR_ALIGNMENT), 43 }; 44 #define FDT_ERRTABSIZE ((int)(sizeof(fdt_errtable) / sizeof(fdt_errtable[0]))) 45 46 const char *fdt_strerror(int errval) 47 { 48 if (errval > 0) 49 return "<valid offset/length>"; 50 else if (errval == 0) 51 return "<no error>"; 52 else if (-errval < FDT_ERRTABSIZE) { 53 const char *s = fdt_errtable[-errval].str; 54 55 if (s) 56 return s; 57 } 58 59 return "<unknown error>"; 60 } 61