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 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