xref: /netbsd-src/sys/external/bsd/libfdt/dist/fdt_strerror.c (revision 5a485aa93ac82c3d325292e0224456d0b90f9a60)
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 
fdt_strerror(int errval)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