xref: /aosp_15_r20/external/dtc/tests/open_pack.c (revision cd60bc56d4bea3af4ec04523e4d71c2b272c8aff)
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