This fixes several small bugs related to fdt_strerror().
- an entry is added to the error table for FDT_ERR_BADLAYOUT.
- Incorrect usage of fdt_strerror() in check_property() and
check_getprop() is corrected (they were passing a positive error code,
when fdt_strerror() expects a negative code).
- Add code to properly retreive an error code from
fdt_get_property() in check_property(). With that a check that the
length returned by fdt_get_property() matches that stored in the
retreived property.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
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>
At present, the blob containing a device tree is passed to the various
fdt_*() functions as a (struct fdt_header *) i.e. a pointer to the
header structure at the beginning of the blob.
This patch changes all the functions so that they instead take a (void
*) pointing to the blob. Under some circumstances can avoid the need
for the caller to cast a blob pointer into a (struct fdt_header *)
before passing it to the fdt_*() functions.
Using a (void *) also reduce the temptation for users of the library
to directly dereference toe (struct fdt_header *) to access header
fields. Instead they must use the fdt_get_header() or
fdt_set_header() macros, or the fdt_magic(), fdt_totalsize()
etc. wrappers around them which are safer, since they will always
handle endian conversion.
With this change, the whole-tree moving, or manipulating functions:
fdt_move(), fdt_open_into() and fdt_pack() no longer need to return a
pointer to the "new" tree. The given (void *) buffer pointer they
take can instead be used directly by the caller as the new tree.
Those functions are thus changed to instead return an error code
(which in turn reduces the number of functions using the ugly encoding
of error values into pointers).
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This patch fixes a number of embarrasing oversights which meant libfdt
did not work correctly on little endian machines. With this patch the
testsuite now passes on x86. Device trees are always created
big-endian.