@@ -157,15 +157,16 @@ def __init__(self, vbk: VBK, offset: int):
157157 self .header = c_vbk .SnapshotSlotHeader (vbk .fh )
158158 self .descriptor = None
159159 self .grain = None
160+ self .valid_max_banks = 0
160161 self .banks = []
161162
162163 if self .header .ContainsSnapshot :
163164 self .descriptor = c_vbk .SnapshotDescriptor (vbk .fh )
164165 self .grain = c_vbk .BanksGrain (vbk .fh )
165166
166- valid_max_banks = 0xF8 if self .vbk .header .SnapshotSlotFormat == 0 else 0x7F00
167+ self . valid_max_banks = 0xF8 if self .vbk .header .SnapshotSlotFormat == 0 else 0x7F00
167168
168- if self .grain .MaxBanks > valid_max_banks :
169+ if self .grain .MaxBanks > self . valid_max_banks :
169170 raise VBKError ("Invalid SnapshotSlot: MaxBanks is not valid" )
170171 if self .grain .StoredBanks > self .grain .MaxBanks :
171172 raise VBKError ("Invalid SnapshotSlot: StoredBanks is greater than MaxBanks" )
@@ -185,11 +186,11 @@ def size(self) -> int:
185186 if self .header .ContainsSnapshot :
186187 slot_size += self .grain .MaxBanks * len (c_vbk .BankDescriptor )
187188 else :
188- slot_size += ( 0xF8 if self .vbk . header . SnapshotSlotFormat == 0 else 0x7F00 ) * len (c_vbk .BankDescriptor )
189+ slot_size += self .valid_max_banks * len (c_vbk .BankDescriptor )
189190
190- if slot_size & 0xFFF :
191+ if slot_size & ( PAGE_SIZE - 1 ) :
191192 # Round to next page boundary
192- slot_size = (slot_size & ~ 0xFFF ) + PAGE_SIZE
193+ slot_size = (slot_size & ~ ( PAGE_SIZE - 1 ) ) + PAGE_SIZE
193194
194195 return slot_size
195196
@@ -279,7 +280,7 @@ def verify(self, crc: int) -> bool:
279280 self .vbk .fh .seek (self .offset )
280281 return crc (self .vbk .fh .read (self .size )) == crc
281282
282- def page (self , page : int ) -> bytes :
283+ def page (self , page : int ) -> memoryview :
283284 """Read a page from the bank.
284285
285286 Args:
@@ -840,7 +841,7 @@ def data(self, idx: int) -> bytes:
840841 page = self ._pages [page_id ]
841842 offset = (offset * self ._entry_size ) + 8
842843
843- buf = self .vbk .active_slot . page (page )
844+ buf = self .vbk .page (page )
844845 entry = buf [offset : offset + self ._entry_size ]
845846 return entry
846847
@@ -929,7 +930,7 @@ def data(self, idx: int) -> bytes:
929930 offset *= self ._entry_size
930931
931932 page_no = self ._lookup_page (page_idx )
932- return self .vbk .active_slot . page (page_no )[offset : offset + self ._entry_size ]
933+ return self .vbk .page (page_no )[offset : offset + self ._entry_size ]
933934
934935
935936class FibMetaSparseTable :
@@ -952,6 +953,7 @@ def __init__(self, vbk: VBK, page: int, count: int):
952953 self .page = page
953954 self .count = count
954955
956+ # Newer versions use a different block descriptor
955957 self .type = FibBlockDescriptorV7 if self .vbk .is_v7 () else FibBlockDescriptor
956958 self ._fake_sparse = self .type (
957959 self .vbk ,
@@ -966,7 +968,7 @@ def __init__(self, vbk: VBK, page: int, count: int):
966968
967969 self ._open_table = lru_cache (128 )(self ._open_table )
968970
969- def _open_table (self , page : int , count : int ) -> MetaVector2 [FibBlockDescriptor | FibBlockDescriptorV7 ]:
971+ def _open_table (self , page : int , count : int ) -> MetaVector [FibBlockDescriptor | FibBlockDescriptorV7 ]:
970972 return MetaVector (self .vbk , self .type , page , count )
971973
972974 def get (self , idx : int ) -> FibBlockDescriptor | FibBlockDescriptorV7 :
@@ -1002,7 +1004,7 @@ def __init__(self, vbk: VBK, page: int, count: int, size: int):
10021004 self .page = page
10031005 self .count = count
10041006
1005- self .mt = FibMetaSparseTable (vbk , page , count )
1007+ self .table = FibMetaSparseTable (vbk , page , count )
10061008
10071009 super ().__init__ (size , align = vbk .block_size )
10081010
@@ -1017,7 +1019,7 @@ def _read(self, offset: int, length: int) -> bytes:
10171019
10181020 read_size = min (length , block_size - offset_in_block )
10191021
1020- block_desc = self .mt .get (block_idx )
1022+ block_desc = self .table .get (block_idx )
10211023
10221024 if block_desc .is_normal ():
10231025 block = self .vbk .block_store .get (block_desc .block_id )
0 commit comments