Skip to content

Commit 0e6edab

Browse files
committed
tag: simplify read_tag_prop function
Signed-off-by: Zhouqi Jiang <luojia@hust.edu.cn>
1 parent 3693f0b commit 0e6edab

File tree

1 file changed

+19
-30
lines changed

1 file changed

+19
-30
lines changed

src/tag.rs

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,17 @@ impl<'a> Tags<'a> {
9999
self.file_index(),
100100
))
101101
}
102+
// caller must ensure in FDT_PROP context. returns (val, prop_name).
103+
#[inline]
104+
fn read_tag_prop(&mut self) -> Result<(&'a [u8], &'a [u8])> {
105+
let val_size = self.read_cur_u32()?;
106+
let name_offset = self.read_cur_u32()?;
107+
// get value slice
108+
let val = self.read_slice_align(val_size)?;
109+
// lookup name in strings table
110+
let prop_name = self.read_table_string(name_offset)?;
111+
Ok((val, prop_name))
112+
}
102113
}
103114

104115
impl<'a> Iterator for Tags<'a> {
@@ -114,40 +125,18 @@ impl<'a> Iterator for Tags<'a> {
114125
let ans = loop {
115126
match self.read_cur_u32() {
116127
// begin of structure tag
117-
Ok(FDT_BEGIN_NODE) => break Some(self.read_string0_align().map(Tag::Begin)),
118-
Ok(FDT_PROP) => {
119-
let val_size = match self.read_cur_u32() {
120-
Ok(v) => v,
121-
Err(e) => break Some(Err(e)),
122-
};
123-
let name_offset = match self.read_cur_u32() {
124-
Ok(v) => v,
125-
Err(e) => break Some(Err(e)),
126-
};
127-
// get value slice
128-
let val = match self.read_slice_align(val_size) {
129-
Ok(slice) => slice,
130-
Err(e) => break Some(Err(e)),
131-
};
132-
133-
// lookup name in strings table
134-
let prop_name = match self.read_table_string(name_offset) {
135-
Ok(slice) => slice,
136-
Err(e) => break Some(Err(e)),
137-
};
138-
break Some(Ok(Tag::Prop(val, prop_name)));
139-
}
140-
Ok(FDT_END_NODE) => break Some(Ok(Tag::End)),
128+
Ok(FDT_BEGIN_NODE) => break self.read_string0_align().map(Tag::Begin),
129+
Ok(FDT_PROP) => break self.read_tag_prop().map(|(a, b)| Tag::Prop(a, b)),
130+
Ok(FDT_END_NODE) => break Ok(Tag::End),
141131
Ok(FDT_NOP) => self.cur += 4,
142-
Ok(FDT_END) => break None,
143-
Ok(invalid) => break Some(Err(Error::invalid_tag_id(invalid, self.file_index()))),
144-
Err(e) => break Some(Err(e)),
132+
Ok(FDT_END) => return None,
133+
Ok(invalid) => break Err(Error::invalid_tag_id(invalid, self.file_index())),
134+
Err(e) => break Err(e),
145135
}
146136
};
147137
match ans {
148-
Some(Ok(tag)) => Some(Ok((tag, self.file_index()))),
149-
Some(Err(e)) => Some(Err(e)),
150-
None => None,
138+
Ok(tag) => Some(Ok((tag, self.file_index()))),
139+
Err(e) => Some(Err(e)),
151140
}
152141
}
153142
}

0 commit comments

Comments
 (0)