xref: /netbsd-src/sys/external/bsd/libfdt/dist/fdt_strerror.c (revision 5a485aa93ac82c3d325292e0224456d0b90f9a60)
1*5a485aa9Sskrll /*	$NetBSD: fdt_strerror.c,v 1.1.1.3 2019/12/22 12:30:36 skrll Exp $	*/
2fc885a42Sskrll 
3*5a485aa9Sskrll // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
46233fbe7Smacallan /*
56233fbe7Smacallan  * libfdt - Flat Device Tree manipulation
66233fbe7Smacallan  * Copyright (C) 2006 David Gibson, IBM Corporation.
76233fbe7Smacallan  *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
86233fbe7Smacallan  */
96233fbe7Smacallan #include "libfdt_env.h"
106233fbe7Smacallan 
116233fbe7Smacallan #include <fdt.h>
126233fbe7Smacallan #include <libfdt.h>
136233fbe7Smacallan 
146233fbe7Smacallan #include "libfdt_internal.h"
156233fbe7Smacallan 
166233fbe7Smacallan struct fdt_errtabent {
176233fbe7Smacallan 	const char *str;
186233fbe7Smacallan };
196233fbe7Smacallan 
206233fbe7Smacallan #define FDT_ERRTABENT(val) \
216233fbe7Smacallan 	[(val)] = { .str = #val, }
226233fbe7Smacallan 
236233fbe7Smacallan static struct fdt_errtabent fdt_errtable[] = {
246233fbe7Smacallan 	FDT_ERRTABENT(FDT_ERR_NOTFOUND),
256233fbe7Smacallan 	FDT_ERRTABENT(FDT_ERR_EXISTS),
266233fbe7Smacallan 	FDT_ERRTABENT(FDT_ERR_NOSPACE),
276233fbe7Smacallan 
286233fbe7Smacallan 	FDT_ERRTABENT(FDT_ERR_BADOFFSET),
296233fbe7Smacallan 	FDT_ERRTABENT(FDT_ERR_BADPATH),
30fc885a42Sskrll 	FDT_ERRTABENT(FDT_ERR_BADPHANDLE),
316233fbe7Smacallan 	FDT_ERRTABENT(FDT_ERR_BADSTATE),
326233fbe7Smacallan 
336233fbe7Smacallan 	FDT_ERRTABENT(FDT_ERR_TRUNCATED),
346233fbe7Smacallan 	FDT_ERRTABENT(FDT_ERR_BADMAGIC),
356233fbe7Smacallan 	FDT_ERRTABENT(FDT_ERR_BADVERSION),
366233fbe7Smacallan 	FDT_ERRTABENT(FDT_ERR_BADSTRUCTURE),
376233fbe7Smacallan 	FDT_ERRTABENT(FDT_ERR_BADLAYOUT),
38fc885a42Sskrll 	FDT_ERRTABENT(FDT_ERR_INTERNAL),
39fc885a42Sskrll 	FDT_ERRTABENT(FDT_ERR_BADNCELLS),
40fc885a42Sskrll 	FDT_ERRTABENT(FDT_ERR_BADVALUE),
41fc885a42Sskrll 	FDT_ERRTABENT(FDT_ERR_BADOVERLAY),
42fc885a42Sskrll 	FDT_ERRTABENT(FDT_ERR_NOPHANDLES),
43*5a485aa9Sskrll 	FDT_ERRTABENT(FDT_ERR_BADFLAGS),
446233fbe7Smacallan };
456233fbe7Smacallan #define FDT_ERRTABSIZE	(sizeof(fdt_errtable) / sizeof(fdt_errtable[0]))
466233fbe7Smacallan 
fdt_strerror(int errval)476233fbe7Smacallan const char *fdt_strerror(int errval)
486233fbe7Smacallan {
496233fbe7Smacallan 	if (errval > 0)
506233fbe7Smacallan 		return "<valid offset/length>";
516233fbe7Smacallan 	else if (errval == 0)
526233fbe7Smacallan 		return "<no error>";
536233fbe7Smacallan 	else if (errval > -FDT_ERRTABSIZE) {
546233fbe7Smacallan 		const char *s = fdt_errtable[-errval].str;
556233fbe7Smacallan 
566233fbe7Smacallan 		if (s)
576233fbe7Smacallan 			return s;
586233fbe7Smacallan 	}
596233fbe7Smacallan 
606233fbe7Smacallan 	return "<unknown error>";
616233fbe7Smacallan }
62