1/*	$NetBSD: nop_node.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 *	Testcase for fdt_nop_node()
7 * Copyright (C) 2006 David Gibson, IBM Corporation.
8 */
9
10#include <stdlib.h>
11#include <stdio.h>
12#include <string.h>
13#include <ctype.h>
14#include <stdint.h>
15
16#include <libfdt.h>
17
18#include "tests.h"
19#include "testdata.h"
20
21int main(int argc, char *argv[])
22{
23	void *fdt;
24	int subnode1_offset, subnode2_offset, subsubnode2_offset;
25	int err;
26
27	test_init(argc, argv);
28	fdt = load_blob_arg(argc, argv);
29
30	subnode1_offset = fdt_path_offset(fdt, "/subnode@1");
31	if (subnode1_offset < 0)
32		FAIL("Couldn't find \"/subnode1\": %s",
33		     fdt_strerror(subnode1_offset));
34	check_getprop_cell(fdt, subnode1_offset, "prop-int", TEST_VALUE_1);
35
36	subnode2_offset = fdt_path_offset(fdt, "/subnode@2");
37	if (subnode2_offset < 0)
38		FAIL("Couldn't find \"/subnode2\": %s",
39		     fdt_strerror(subnode2_offset));
40	check_getprop_cell(fdt, subnode2_offset, "prop-int", TEST_VALUE_2);
41
42	subsubnode2_offset = fdt_path_offset(fdt, "/subnode@2/subsubnode");
43	if (subsubnode2_offset < 0)
44		FAIL("Couldn't find \"/subnode@2/subsubnode\": %s",
45		     fdt_strerror(subsubnode2_offset));
46	check_getprop_cell(fdt, subsubnode2_offset, "prop-int", TEST_VALUE_2);
47
48	err = fdt_nop_node(fdt, subnode1_offset);
49	if (err)
50		FAIL("fdt_nop_node(subnode1): %s", fdt_strerror(err));
51
52	subnode1_offset = fdt_path_offset(fdt, "/subnode@1");
53	if (subnode1_offset != -FDT_ERR_NOTFOUND)
54		FAIL("fdt_path_offset(subnode1) returned \"%s\" instead of \"%s\"",
55		     fdt_strerror(subnode1_offset),
56		     fdt_strerror(-FDT_ERR_NOTFOUND));
57
58	subnode2_offset = fdt_path_offset(fdt, "/subnode@2");
59	if (subnode2_offset < 0)
60		FAIL("Couldn't find \"/subnode2\": %s",
61		     fdt_strerror(subnode2_offset));
62	check_getprop_cell(fdt, subnode2_offset, "prop-int", TEST_VALUE_2);
63
64	subsubnode2_offset = fdt_path_offset(fdt, "/subnode@2/subsubnode");
65	if (subsubnode2_offset < 0)
66		FAIL("Couldn't find \"/subnode@2/subsubnode\": %s",
67		     fdt_strerror(subsubnode2_offset));
68	check_getprop_cell(fdt, subsubnode2_offset, "prop-int", TEST_VALUE_2);
69
70	err = fdt_nop_node(fdt, subnode2_offset);
71	if (err)
72		FAIL("fdt_nop_node(subnode2): %s", fdt_strerror(err));
73
74	subnode1_offset = fdt_path_offset(fdt, "/subnode@1");
75	if (subnode1_offset != -FDT_ERR_NOTFOUND)
76		FAIL("fdt_path_offset(subnode1) returned \"%s\" instead of \"%s\"",
77		     fdt_strerror(subnode1_offset),
78		     fdt_strerror(-FDT_ERR_NOTFOUND));
79
80	subnode2_offset = fdt_path_offset(fdt, "/subnode@2");
81	if (subnode2_offset != -FDT_ERR_NOTFOUND)
82		FAIL("fdt_path_offset(subnode2) returned \"%s\" instead of \"%s\"",
83		     fdt_strerror(subnode2_offset),
84		     fdt_strerror(-FDT_ERR_NOTFOUND));
85
86	subsubnode2_offset = fdt_path_offset(fdt, "/subnode@2/subsubnode");
87	if (subsubnode2_offset != -FDT_ERR_NOTFOUND)
88		FAIL("fdt_path_offset(subsubnode2) returned \"%s\" instead of \"%s\"",
89		     fdt_strerror(subsubnode2_offset),
90		     fdt_strerror(-FDT_ERR_NOTFOUND));
91
92	PASS();
93}
94