File tree Expand file tree Collapse file tree 2 files changed +19
-13
lines changed
Expand file tree Collapse file tree 2 files changed +19
-13
lines changed Original file line number Diff line number Diff line change @@ -133,9 +133,9 @@ fn main() -> Result<(), Error> {
133133 }
134134
135135 for current_node in t. soc . nodes ( ) . unwrap ( ) {
136- if current_node. get_split_name ( ) . 0 == "virtio_mmio" {
136+ if current_node. get_parsed_name ( ) . 0 == "virtio_mmio" {
137137 let mmio = current_node. deserialize :: < VirtIoMmio > ( ) ;
138- println ! ( "{:?} {:?}" , current_node. get_split_name ( ) , mmio. reg) ;
138+ println ! ( "{:?} {:?}" , current_node. get_parsed_name ( ) , mmio. reg) ;
139139 }
140140 }
141141 for current_prop in t. soc . props ( ) . unwrap ( ) {
Original file line number Diff line number Diff line change @@ -56,6 +56,8 @@ impl<'de> Node<'de> {
5656 let mut cursor = struct_deseriallizer. cursor ;
5757 let mut prop: Option < BodyCursor > = None ;
5858 let mut node: Option < BodyCursor > = None ;
59+ // TODO: 这里采用朴素的方式遍历块,可能会和 GroupCursor 带来的缓存冲突。
60+ // 可能需要一个更优雅的缓存方案或者放弃缓存。
5961 loop {
6062 match cursor. move_on ( dtb) {
6163 Cursor :: Title ( c) => {
@@ -208,17 +210,21 @@ impl<'de> NodeItem<'de> {
208210 . unwrap ( )
209211 }
210212
211- pub fn get_split_name ( & self ) -> ( & str , & str ) {
212- let pre_len = self
213- . name
214- . as_bytes ( )
215- . iter ( )
216- . take_while ( |b| * * b != b'@' )
217- . count ( ) ;
218- let mut res = self . name . split_at ( pre_len) ;
219- // Remove @ prefix
220- res. 1 = res. 1 . split_at ( 1 ) . 1 ;
221- res
213+ pub fn get_parsed_name ( & self ) -> ( & str , Option < & str > ) {
214+ if let Some ( _) = self . name . find ( "@" ) {
215+ let pre_len = self
216+ . name
217+ . as_bytes ( )
218+ . iter ( )
219+ . take_while ( |b| * * b != b'@' )
220+ . count ( ) ;
221+ let ( node_name, raw_unit_address) = self . name . split_at ( pre_len) ;
222+ // Remove @ prefix
223+ let unit_address = raw_unit_address. split_at ( 1 ) . 1 ;
224+ ( node_name, Some ( unit_address) )
225+ } else {
226+ ( self . name , None )
227+ }
222228 }
223229
224230 pub fn get_full_name ( & self ) -> & str {
You can’t perform that action at this time.
0 commit comments