xref: /netbsd-src/external/gpl2/dtc/dist/tests/incbin.c (revision cc7d2833ecf67da5a5ddc470841931eb9f6723e4)
1*cc7d2833Sskrll /*	$NetBSD: incbin.c,v 1.1.1.3 2019/12/22 12:34:07 skrll Exp $	*/
2d89652e2Sskrll 
3*cc7d2833Sskrll // SPDX-License-Identifier: LGPL-2.1-or-later
4b8ae3907Smacallan /*
5b8ae3907Smacallan  * libfdt - Flat Device Tree manipulation
6b8ae3907Smacallan  *	Testcase for string escapes in dtc
7b8ae3907Smacallan  * Copyright (C) 2006 David Gibson, IBM Corporation.
8b8ae3907Smacallan  */
9b8ae3907Smacallan #include <stdlib.h>
10b8ae3907Smacallan #include <stdio.h>
11b8ae3907Smacallan #include <string.h>
12b8ae3907Smacallan #include <stdint.h>
13b8ae3907Smacallan #include <errno.h>
14b8ae3907Smacallan 
15b8ae3907Smacallan #include <libfdt.h>
16b8ae3907Smacallan 
17b8ae3907Smacallan #include "tests.h"
18b8ae3907Smacallan #include "testdata.h"
19b8ae3907Smacallan 
20b8ae3907Smacallan #define CHUNKSIZE	1024
21b8ae3907Smacallan 
load_file(const char * name,int * len)22b8ae3907Smacallan static char *load_file(const char *name, int *len)
23b8ae3907Smacallan {
24b8ae3907Smacallan 	FILE *f;
25b8ae3907Smacallan 	char *buf = NULL;
26b8ae3907Smacallan 	int bufsize = 0, n;
27b8ae3907Smacallan 
28b8ae3907Smacallan 	*len = 0;
29b8ae3907Smacallan 
30b8ae3907Smacallan 	f = fopen(name, "r");
31b8ae3907Smacallan 	if (!f)
32b8ae3907Smacallan 		FAIL("Couldn't open \"%s\": %s", name, strerror(errno));
33b8ae3907Smacallan 
34b8ae3907Smacallan 	while (!feof(f)) {
35b8ae3907Smacallan 		if (bufsize < (*len + CHUNKSIZE)) {
36b8ae3907Smacallan 			buf = xrealloc(buf, *len + CHUNKSIZE);
37b8ae3907Smacallan 			bufsize = *len + CHUNKSIZE;
38b8ae3907Smacallan 		}
39b8ae3907Smacallan 
40b8ae3907Smacallan 		n = fread(buf + *len, 1, CHUNKSIZE, f);
41b8ae3907Smacallan 		if (ferror(f))
42b8ae3907Smacallan 			FAIL("Error reading \"%s\": %s", name, strerror(errno));
43b8ae3907Smacallan 		*len += n;
44b8ae3907Smacallan 	}
45b8ae3907Smacallan 
46b8ae3907Smacallan 	return buf;
47b8ae3907Smacallan }
48b8ae3907Smacallan 
main(int argc,char * argv[])49b8ae3907Smacallan int main(int argc, char *argv[])
50b8ae3907Smacallan {
51b8ae3907Smacallan 	void *fdt;
52b8ae3907Smacallan 	char *incbin;
53b8ae3907Smacallan 	int len;
54b8ae3907Smacallan 
55b8ae3907Smacallan 	test_init(argc, argv);
56b8ae3907Smacallan 
57b8ae3907Smacallan 	incbin = load_file("incbin.bin", &len);
58b8ae3907Smacallan 	fdt = load_blob_arg(argc, argv);
59b8ae3907Smacallan 
60b8ae3907Smacallan 	check_getprop(fdt, 0, "incbin", len, incbin);
61b8ae3907Smacallan 	check_getprop(fdt, 0, "incbin-partial", 17, incbin + 13);
62b8ae3907Smacallan 
63b8ae3907Smacallan 	PASS();
64b8ae3907Smacallan }
65