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