libfdt: Introduce PropOffset & StringOffset
Similarly to NodeOffset, introduce new transparent c_int wrappers for
DT offsets pointing to properties and offsets in the DT string table,
allowing the compiler to detect mis-used values.
Test: m pvmfw
Test: atest liblibfdt.integration_test
Change-Id: Ie69e61ede25e2e03fe179a5f84fa63f010515cce
diff --git a/libs/libfdt/src/lib.rs b/libs/libfdt/src/lib.rs
index d153303..1961232 100644
--- a/libs/libfdt/src/lib.rs
+++ b/libs/libfdt/src/lib.rs
@@ -27,9 +27,9 @@
PropertyIterator, RangesIterator, Reg, RegIterator, SubnodeIterator,
};
pub use result::{FdtError, Result};
-pub use safe_types::{NodeOffset, Phandle};
+pub use safe_types::{NodeOffset, Phandle, PropOffset, StringOffset};
-use core::ffi::{c_int, c_void, CStr};
+use core::ffi::{c_void, CStr};
use core::ops::Range;
use cstr::cstr;
use libfdt::get_slice_at_ptr;
@@ -93,12 +93,12 @@
}
impl FdtPropertyStruct {
- fn from_offset(fdt: &Fdt, offset: c_int) -> Result<&Self> {
+ fn from_offset(fdt: &Fdt, offset: PropOffset) -> Result<&Self> {
Ok(fdt.get_property_by_offset(offset)?.as_ref())
}
- fn name_offset(&self) -> c_int {
- u32::from_be(self.0.nameoff).try_into().unwrap()
+ fn name_offset(&self) -> StringOffset {
+ StringOffset(u32::from_be(self.0.nameoff).try_into().unwrap())
}
fn data_len(&self) -> usize {
@@ -114,12 +114,12 @@
#[derive(Clone, Copy, Debug)]
pub struct FdtProperty<'a> {
fdt: &'a Fdt,
- offset: c_int,
+ offset: PropOffset,
property: &'a FdtPropertyStruct,
}
impl<'a> FdtProperty<'a> {
- fn new(fdt: &'a Fdt, offset: c_int) -> Result<Self> {
+ fn new(fdt: &'a Fdt, offset: PropOffset) -> Result<Self> {
let property = FdtPropertyStruct::from_offset(fdt, offset)?;
Ok(Self { fdt, offset, property })
}