1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 /*
3 * libfdt - Flat Device Tree manipulation
4 * Basic testcase for read-only access
5 * Copyright (C) 2006 David Gibson, IBM Corporation.
6 */
7
8 #include <stdlib.h>
9 #include <stdio.h>
10 #include <string.h>
11 #include <limits.h>
12 #include <stdint.h>
13
14 #include <libfdt.h>
15
16 #include "tests.h"
17 #include "testdata.h"
18
main(int argc,char * argv[])19 int main(int argc, char *argv[])
20 {
21 void *fdt, *fdt1;
22 void *buf;
23 int oldsize, bufsize, packsize;
24 int err;
25 const char *inname;
26 char outname[PATH_MAX];
27
28 test_init(argc, argv);
29 fdt = load_blob_arg(argc, argv);
30 inname = argv[1];
31
32 oldsize = fdt_totalsize(fdt);
33
34 bufsize = oldsize * 2;
35
36 buf = xmalloc(bufsize);
37 /* don't leak uninitialized memory into our output */
38 memset(buf, 0, bufsize);
39
40 fdt1 = buf;
41 err = fdt_open_into(fdt, fdt1, bufsize);
42 if (err)
43 FAIL("fdt_open_into(): %s", fdt_strerror(err));
44 sprintf(outname, "opened.%s", inname);
45 save_blob(outname, fdt1);
46
47 err = fdt_pack(fdt1);
48 if (err)
49 FAIL("fdt_pack(): %s", fdt_strerror(err));
50 sprintf(outname, "repacked.%s", inname);
51 save_blob(outname, fdt1);
52
53 packsize = fdt_totalsize(fdt1);
54
55 verbose_printf("oldsize = %d, bufsize = %d, packsize = %d\n",
56 oldsize, bufsize, packsize);
57 PASS();
58 }
59