From 5b344f9c5aaff698715ffd113164c9cff45d5d2f Mon Sep 17 00:00:00 2001 From: David Gibson Date: Thu, 21 Dec 2006 09:57:08 +1100 Subject: [PATCH] libfdt: Add fdt_strerror() function to library This function moves the fdt_strerror() function, currently found in the test code into the fdt library proper. This makes life easier for any library users who want to provide meaningful error messages. The function goes into a module of its own, so that users who don't need the function won't get a copy of it linked in. Signed-off-by: David Gibson --- Makefile | 2 +- TODO | 1 - fdt_strerror.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++ libfdt.h | 3 +++ tests/tests.h | 1 - tests/testutils.c | 41 ------------------------------ 6 files changed, 67 insertions(+), 44 deletions(-) create mode 100644 fdt_strerror.c diff --git a/Makefile b/Makefile index d464a82..c8240bb 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ PREFIX = /usr/local TARGETLIBS = libfdt.a -LIBOBJS = fdt.o fdt_ro.o fdt_wip.o fdt_sw.o fdt_rw.o +LIBOBJS = fdt.o fdt_ro.o fdt_wip.o fdt_sw.o fdt_rw.o fdt_strerror.o SOURCE = $(shell find . -maxdepth 1 ! -name version.h -a -name '*.[h]') SOURCE += *.c Makefile diff --git a/TODO b/TODO index cd796f6..794d0a6 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,3 @@ -- Move fdt_strerror() to core library for convenience - Find node by linux,phandle property - Tree traversal functions - Graft function diff --git a/fdt_strerror.c b/fdt_strerror.c new file mode 100644 index 0000000..74c97e7 --- /dev/null +++ b/fdt_strerror.c @@ -0,0 +1,63 @@ +/* + * libfdt - Flat Device Tree manipulation + * Copyright (C) 2006 David Gibson, IBM Corporation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#include "libfdt_env.h" + +#include +#include + +#include "libfdt_internal.h" + +struct errtabent { + const char *str; +}; + +#define ERRTABENT(val) \ + [(val)] = { .str = #val, } + +static struct errtabent errtable[] = { + ERRTABENT(FDT_ERR_NOTFOUND), + ERRTABENT(FDT_ERR_EXISTS), + ERRTABENT(FDT_ERR_NOSPACE), + + ERRTABENT(FDT_ERR_BADOFFSET), + ERRTABENT(FDT_ERR_BADPATH), + ERRTABENT(FDT_ERR_BADSTATE), + + ERRTABENT(FDT_ERR_TRUNCATED), + ERRTABENT(FDT_ERR_BADMAGIC), + ERRTABENT(FDT_ERR_BADVERSION), + ERRTABENT(FDT_ERR_BADSTRUCTURE), +}; +#define ERRTABSIZE (sizeof(errtable) / sizeof(errtable[0])) + +const char *fdt_strerror(int errval) +{ + if (errval > 0) + return ""; + else if (errval == 0) + return ""; + else if (errval > -ERRTABSIZE) { + const char *s = errtable[-errval].str; + + if (s) + return s; + } + + return ""; +} diff --git a/libfdt.h b/libfdt.h index 8ba2daf..acdc72e 100644 --- a/libfdt.h +++ b/libfdt.h @@ -129,4 +129,7 @@ int fdt_add_subnode_namelen(void *fdt, int parentoffset, int fdt_add_subnode(void *fdt, int parentoffset, const char *name); int fdt_del_node(void *fdt, int nodeoffset); +/* Extra functions */ +const char *fdt_strerror(int errval); + #endif /* _LIBFDT_H */ diff --git a/tests/tests.h b/tests/tests.h index b4dd10a..b262e31 100644 --- a/tests/tests.h +++ b/tests/tests.h @@ -108,7 +108,6 @@ static inline void *xrealloc(void *p, size_t size) return p; } -const char *fdt_strerror(int errval); void check_property(void *fdt, int nodeoffset, const char *name, int len, const void *val); #define check_property_typed(fdt, nodeoffset, name, val) \ diff --git a/tests/testutils.c b/tests/testutils.c index f411067..9637415 100644 --- a/tests/testutils.c +++ b/tests/testutils.c @@ -68,47 +68,6 @@ void test_init(int argc, char *argv[]) test_name, getpid()); } - -struct errtabent { - const char *str; -}; - -#define ERRTABENT(val) \ - [(val)] = { .str = #val, } - -static struct errtabent errtable[] = { - ERRTABENT(FDT_ERR_NOTFOUND), - ERRTABENT(FDT_ERR_EXISTS), - ERRTABENT(FDT_ERR_NOSPACE), - - ERRTABENT(FDT_ERR_BADOFFSET), - ERRTABENT(FDT_ERR_BADPATH), - ERRTABENT(FDT_ERR_BADSTATE), - - ERRTABENT(FDT_ERR_TRUNCATED), - ERRTABENT(FDT_ERR_BADMAGIC), - ERRTABENT(FDT_ERR_BADVERSION), - ERRTABENT(FDT_ERR_BADSTRUCTURE), -}; - -#define ERRTABSIZE (sizeof(errtable) / sizeof(errtable[0])) - -const char *fdt_strerror(int errval) -{ - if (errval > 0) - return ""; - else if (errval == 0) - return ""; - else if (errval > -ERRTABSIZE) { - const char *s = errtable[-errval].str; - - if (s) - return s; - } - - return ""; -} - void check_property(void *fdt, int nodeoffset, const char *name, int len, const void *val) {