Browse Source

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 <david@gibson.dropbear.id.au>
main
David Gibson 18 years ago
parent
commit
5b344f9c5a
  1. 2
      Makefile
  2. 1
      TODO
  3. 63
      fdt_strerror.c
  4. 3
      libfdt.h
  5. 1
      tests/tests.h
  6. 41
      tests/testutils.c

2
Makefile

@ -1,6 +1,6 @@ @@ -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

1
TODO

@ -1,4 +1,3 @@ @@ -1,4 +1,3 @@
- Move fdt_strerror() to core library for convenience
- Find node by linux,phandle property
- Tree traversal functions
- Graft function

63
fdt_strerror.c

@ -0,0 +1,63 @@ @@ -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 <fdt.h>
#include <libfdt.h>

#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 "<valid offset>";
else if (errval == 0)
return "<no error>";
else if (errval > -ERRTABSIZE) {
const char *s = errtable[-errval].str;

if (s)
return s;
}

return "<unknown error>";
}

3
libfdt.h

@ -129,4 +129,7 @@ int fdt_add_subnode_namelen(void *fdt, int parentoffset, @@ -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 */

1
tests/tests.h

@ -108,7 +108,6 @@ static inline void *xrealloc(void *p, size_t size) @@ -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) \

41
tests/testutils.c

@ -68,47 +68,6 @@ void test_init(int argc, char *argv[]) @@ -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 "<valid offset>";
else if (errval == 0)
return "<no error>";
else if (errval > -ERRTABSIZE) {
const char *s = errtable[-errval].str;

if (s)
return s;
}

return "<unknown error>";
}

void check_property(void *fdt, int nodeoffset, const char *name,
int len, const void *val)
{

Loading…
Cancel
Save