diff options
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/run_tests.sh | 2 | ||||
-rw-r--r-- | tests/sw_tree1.c | 35 |
2 files changed, 33 insertions, 4 deletions
diff --git a/tests/run_tests.sh b/tests/run_tests.sh index 759625d..cf87066 100755 --- a/tests/run_tests.sh +++ b/tests/run_tests.sh @@ -348,7 +348,7 @@ libfdt_tests () { run_test sw_states # Resizing tests - for mode in resize realloc; do + for mode in resize realloc newalloc; do run_test sw_tree1 $mode tree1_tests sw_tree1.test.dtb tree1_tests unfinished_tree1.test.dtb diff --git a/tests/sw_tree1.c b/tests/sw_tree1.c index 386b05f..2a67c12 100644 --- a/tests/sw_tree1.c +++ b/tests/sw_tree1.c @@ -35,10 +35,13 @@ static enum { FIXED = 0, RESIZE, REALLOC, + NEWALLOC, } alloc_mode; static void realloc_fdt(void **fdt, size_t *size, bool created) { + int err; + switch (alloc_mode) { case FIXED: if (!(*fdt)) @@ -52,7 +55,10 @@ static void realloc_fdt(void **fdt, size_t *size, bool created) *fdt = xmalloc(SPACE); } else if (*size < SPACE) { *size += 1; - fdt_resize(*fdt, *fdt, *size); + err = fdt_resize(*fdt, *fdt, *size); + if (err < 0) + FAIL("fdt_resize() failed: %s", + fdt_strerror(err)); } else { FAIL("Ran out of space"); } @@ -61,9 +67,29 @@ static void realloc_fdt(void **fdt, size_t *size, bool created) case REALLOC: *size += 1; *fdt = xrealloc(*fdt, *size); - if (created) - fdt_resize(*fdt, *fdt, *size); + if (created) { + err = fdt_resize(*fdt, *fdt, *size); + if (err < 0) + FAIL("fdt_resize() failed: %s", + fdt_strerror(err)); + } + return; + + case NEWALLOC: { + void *buf; + + *size += 1; + buf = xmalloc(*size); + if (created) { + err = fdt_resize(*fdt, buf, *size); + if (err < 0) + FAIL("fdt_resize() failed: %s", + fdt_strerror(err)); + } + free(*fdt); + *fdt = buf; return; + } default: CONFIG("Bad allocation mode"); @@ -101,6 +127,9 @@ int main(int argc, char *argv[]) } else if (streq(argv[1], "realloc")) { alloc_mode = REALLOC; size = 0; + } else if (streq(argv[1], "newalloc")) { + alloc_mode = NEWALLOC; + size = 0; } else { char *endp; |