libfdt: Add Fdt::symbols() and Fdt::symbols_mut()
Bug: 277993056
Test: TH, liblibfdt.integration_test
Change-Id: I20f4226ef45f03c5ed3b54edaf9fb941379a8a5f
diff --git a/libs/libfdt/src/lib.rs b/libs/libfdt/src/lib.rs
index 0d45494..b187c33 100644
--- a/libs/libfdt/src/lib.rs
+++ b/libs/libfdt/src/lib.rs
@@ -975,6 +975,16 @@
self.node(cstr!("/"))?.ok_or(FdtError::Internal)
}
+ /// Returns the standard /__symbols__ node.
+ pub fn symbols(&self) -> Result<Option<FdtNode>> {
+ self.node(cstr!("/__symbols__"))
+ }
+
+ /// Returns the standard /__symbols__ node as mutable
+ pub fn symbols_mut(&mut self) -> Result<Option<FdtNodeMut>> {
+ self.node_mut(cstr!("/__symbols__"))
+ }
+
/// Returns a tree node by its full path.
pub fn node(&self, path: &CStr) -> Result<Option<FdtNode>> {
Ok(self.path_offset(path.to_bytes())?.map(|offset| FdtNode { fdt: self, offset }))
diff --git a/libs/libfdt/tests/api_test.rs b/libs/libfdt/tests/api_test.rs
index 78c640e..f4a4af5 100644
--- a/libs/libfdt/tests/api_test.rs
+++ b/libs/libfdt/tests/api_test.rs
@@ -16,7 +16,7 @@
//! Integration tests of the library libfdt.
-use libfdt::{Fdt, FdtError, Phandle};
+use libfdt::{Fdt, FdtError, FdtNodeMut, Phandle};
use std::ffi::{CStr, CString};
use std::fs;
use std::ops::Range;
@@ -247,3 +247,15 @@
assert_eq!(subnode.name(), Ok(name.as_c_str()));
}
}
+
+#[test]
+fn fdt_symbols() {
+ let mut data = fs::read(TEST_TREE_PHANDLE_PATH).unwrap();
+ let fdt = Fdt::from_mut_slice(&mut data).unwrap();
+
+ let symbols = fdt.symbols().unwrap().unwrap();
+ assert_eq!(symbols.name(), Ok(cstr!("__symbols__")));
+
+ // Validates type.
+ let _symbols: FdtNodeMut = fdt.symbols_mut().unwrap().unwrap();
+}
diff --git a/libs/libfdt/tests/data/test_tree_phandle.dts b/libs/libfdt/tests/data/test_tree_phandle.dts
index 0438241..97d9028 100644
--- a/libs/libfdt/tests/data/test_tree_phandle.dts
+++ b/libs/libfdt/tests/data/test_tree_phandle.dts
@@ -32,4 +32,8 @@
};
};
};
+
+ __symbols__ {
+ symbol_a = "/node_a";
+ };
};
\ No newline at end of file