9
9
from typing import BinaryIO , Iterator , Optional , Union
10
10
from uuid import UUID
11
11
12
- from dissect .cstruct import Instance
13
12
from dissect .util import ts
14
13
from dissect .util .stream import RangeStream , RunlistStream
15
14
@@ -95,7 +94,7 @@ def get_relative_inode(self, agnum: int, inum: int, *args, **kwargs) -> INode:
95
94
96
95
return self .get_allocation_group (agnum ).get_inode (inum , * args , ** kwargs )
97
96
98
- def walk_agi (self , block : int , agnum : int ) -> Iterator [Instance ]:
97
+ def walk_agi (self , block : int , agnum : int ) -> Iterator [c_xfs . xfs_inobt_rec ]:
99
98
for record in self .walk_small_tree (block , agnum , 16 , (c_xfs .XFS_IBT_MAGIC , c_xfs .XFS_IBT_CRC_MAGIC )):
100
99
yield c_xfs .xfs_inobt_rec (record )
101
100
@@ -119,7 +118,11 @@ def walk_small_tree(
119
118
yield from self ._walk_small_tree (root , leaf_size , agnum , magic )
120
119
121
120
def _walk_small_tree (
122
- self , node : Instance , leaf_size : int , agnum : int , magic : Optional [list [int ]] = None
121
+ self ,
122
+ node : c_xfs .xfs_btree_sblock | c_xfs .xfs_btree_sblock_crc ,
123
+ leaf_size : int ,
124
+ agnum : int ,
125
+ magic : Optional [list [int ]] = None ,
123
126
) -> Iterator [bytes ]:
124
127
fh = self .fh
125
128
if magic and node .bb_magic not in magic :
@@ -141,7 +144,12 @@ def _walk_small_tree(
141
144
142
145
yield from self ._walk_small_tree (self ._sblock_s (fh ), leaf_size , agnum , magic )
143
146
144
- def _walk_large_tree (self , node : Instance , leaf_size : int , magic : Optional [list [int ]] = None ) -> Iterator [bytes ]:
147
+ def _walk_large_tree (
148
+ self ,
149
+ node : c_xfs .xfs_btree_lblock | c_xfs .xfs_btree_lblock_crc ,
150
+ leaf_size : int ,
151
+ magic : Optional [list [int ]] = None ,
152
+ ) -> Iterator [bytes ]:
145
153
fh = self .fh
146
154
if magic and node .bb_magic not in magic :
147
155
magic_values = ", " .join ([f"0x{ magic_value :x} " for magic_value in magic ])
@@ -219,7 +227,7 @@ def walk_extents(self, fsb: int) -> Iterator[tuple[int, int, int, int]]:
219
227
block = agnum * self .xfs .sb .sb_agblocks + blknum
220
228
yield from self .xfs .walk_extents (block )
221
229
222
- def walk_agi (self ) -> Iterator [Instance ]:
230
+ def walk_agi (self ) -> Iterator [c_xfs . xfs_inobt_rec ]:
223
231
yield from self .xfs .walk_agi (self .agi .agi_root , self .num )
224
232
225
233
def walk_tree (self , fsb : int , magic : Optional [list [int ]] = None , small : bool = False ):
@@ -260,7 +268,7 @@ def __init__(
260
268
def __repr__ (self ) -> str :
261
269
return f"<inode { self .inum } ({ self .ag .num } :{ self .relative_inum } )>"
262
270
263
- def _read_inode (self ) -> Instance :
271
+ def _read_inode (self ) -> c_xfs . xfs_dinode :
264
272
self .ag .fh .seek (self .relative_inum * self .ag .sb .sb_inodesize )
265
273
self ._buf = io .BytesIO (self .ag .fh .read (self .ag .sb .sb_inodesize ))
266
274
inode = c_xfs .xfs_dinode (self ._buf )
@@ -271,7 +279,7 @@ def _read_inode(self) -> Instance:
271
279
return inode
272
280
273
281
@property
274
- def inode (self ) -> Instance :
282
+ def inode (self ) -> c_xfs . xfs_dinode :
275
283
if not self ._inode :
276
284
self ._inode = self ._read_inode ()
277
285
return self ._inode
0 commit comments