This file provides sequential-write features to generate a new device tree programmatically. It includes most sanity checks of the header. Allow these checks to be disabled to reduce code size. Signed-off-by: Simon Glass <sjg@xxxxxxxxxxxx> --- libfdt/fdt_sw.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/libfdt/fdt_sw.c b/libfdt/fdt_sw.c index 76bea22..0dba159 100644 --- a/libfdt/fdt_sw.c +++ b/libfdt/fdt_sw.c @@ -12,17 +12,20 @@ static int fdt_sw_probe_(void *fdt) { - if (fdt_magic(fdt) == FDT_MAGIC) - return -FDT_ERR_BADSTATE; - else if (fdt_magic(fdt) != FDT_SW_MAGIC) - return -FDT_ERR_BADMAGIC; + if (_check1()) { + if (fdt_magic(fdt) == FDT_MAGIC) + return -FDT_ERR_BADSTATE; + else if (fdt_magic(fdt) != FDT_SW_MAGIC) + return -FDT_ERR_BADMAGIC; + } + return 0; } #define FDT_SW_PROBE(fdt) \ { \ int err; \ - if ((err = fdt_sw_probe_(fdt)) != 0) \ + if (_check1() && (err = fdt_sw_probe_(fdt)) != 0) \ return err; \ } @@ -38,7 +41,7 @@ static int fdt_sw_probe_memrsv_(void *fdt) if (err) return err; - if (fdt_off_dt_strings(fdt) != 0) + if (_check2() && fdt_off_dt_strings(fdt) != 0) return -FDT_ERR_BADSTATE; return 0; } @@ -46,7 +49,7 @@ static int fdt_sw_probe_memrsv_(void *fdt) #define FDT_SW_PROBE_MEMRSV(fdt) \ { \ int err; \ - if ((err = fdt_sw_probe_memrsv_(fdt)) != 0) \ + if (_check2() && (err = fdt_sw_probe_memrsv_(fdt)) != 0) \ return err; \ } @@ -60,7 +63,11 @@ static int fdt_sw_probe_memrsv_(void *fdt) */ static int fdt_sw_probe_struct_(void *fdt) { - int err = fdt_sw_probe_(fdt); + int err; + + if (!_check2()) + return 0; + err = fdt_sw_probe_(fdt); if (err) return err; @@ -72,7 +79,7 @@ static int fdt_sw_probe_struct_(void *fdt) #define FDT_SW_PROBE_STRUCT(fdt) \ { \ int err; \ - if ((err = fdt_sw_probe_struct_(fdt)) != 0) \ + if (_check2() && (err = fdt_sw_probe_struct_(fdt)) != 0) \ return err; \ } @@ -151,7 +158,7 @@ int fdt_resize(void *fdt, void *buf, int bufsize) headsize = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt); tailsize = fdt_size_dt_strings(fdt); - if ((headsize + tailsize) > fdt_totalsize(fdt)) + if (_check2() && (headsize + tailsize) > fdt_totalsize(fdt)) return -FDT_ERR_INTERNAL; if ((headsize + tailsize) > bufsize) -- 2.22.0.657.g960e92d24f-goog