diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2018-03-16 22:40:26 +1100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-07-19 07:01:12 +0200 |
commit | 9a7de8e2d05aade58020f10d48a69db4111ee5ac (patch) | |
tree | 03f6ba8214fbecbd1ffb942d7a1a7b3f06e18ebf /cpukit/dtc | |
parent | libfdt: Safer access to memory reservations (diff) | |
download | rtems-9a7de8e2d05aade58020f10d48a69db4111ee5ac.tar.bz2 |
libfdt: Add fdt_header_size()
We have a couple of places within libfdt and its tests where we need to
find the size of the header, based on the version. Add a helper function
for it.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Diffstat (limited to 'cpukit/dtc')
-rw-r--r-- | cpukit/dtc/libfdt/fdt.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/cpukit/dtc/libfdt/fdt.c b/cpukit/dtc/libfdt/fdt.c index 5f1e57a5bd..ae03b11129 100644 --- a/cpukit/dtc/libfdt/fdt.c +++ b/cpukit/dtc/libfdt/fdt.c @@ -96,21 +96,33 @@ static int check_block_(uint32_t hdrsize, uint32_t totalsize, return 1; } +size_t fdt_header_size_(uint32_t version) +{ + if (version <= 1) + return FDT_V1_SIZE; + else if (version <= 2) + return FDT_V2_SIZE; + else if (version <= 3) + return FDT_V3_SIZE; + else if (version <= 16) + return FDT_V16_SIZE; + else + return FDT_V17_SIZE; +} + int fdt_check_header(const void *fdt) { - size_t hdrsize = FDT_V16_SIZE; + size_t hdrsize; if (fdt_magic(fdt) != FDT_MAGIC) return -FDT_ERR_BADMAGIC; + hdrsize = fdt_header_size(fdt); if ((fdt_version(fdt) < FDT_FIRST_SUPPORTED_VERSION) || (fdt_last_comp_version(fdt) > FDT_LAST_SUPPORTED_VERSION)) return -FDT_ERR_BADVERSION; if (fdt_version(fdt) < fdt_last_comp_version(fdt)) return -FDT_ERR_BADVERSION; - if (fdt_version(fdt) >= 17) - hdrsize = FDT_V17_SIZE; - if ((fdt_totalsize(fdt) < hdrsize) || (fdt_totalsize(fdt) > INT_MAX)) return -FDT_ERR_TRUNCATED; |