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