@@ -11,7 +11,7 @@ use crate::pager::format::data_page::{body, extract_page_header_ids, open_data_p
1111use crate :: pager:: format:: page_kind:: PageKind ;
1212use crate :: pager:: format:: segment_footer:: { SegmentFooterFields , decode_segment_footer} ;
1313use crate :: pager:: format:: structural_header:: { SegmentHeaderFields , decode_segment_header} ;
14- use crate :: vfs:: { Vfs , VfsFile , checked_read_progress } ;
14+ use crate :: vfs:: { Vfs , VfsFile , read_exact_at_borrowed } ;
1515
1616use super :: types:: { EXTENT_INDEX_ENTRY_LEN , ExtentIndexEntry } ;
1717use super :: writer:: { live_path, staging_path} ;
@@ -84,24 +84,12 @@ pub(crate) async fn authenticate_segment_metadata<V: Vfs + Clone>(
8484 let master_key = pager. mk_for ( meta. mk_epoch , cipher_id) ?;
8585 let hk = derive_hk ( & master_key) ?;
8686 let mut header_bytes = vec ! [ 0u8 ; page_size] ;
87- let mut header_offset = 0 ;
88- let mut header_remaining = & mut header_bytes[ ..] ;
89- while !header_remaining. is_empty ( ) {
90- let read = file. read_at ( header_offset, header_remaining) . await ?;
91- checked_read_progress ( & mut header_offset, read, header_remaining. len ( ) ) ?;
92- header_remaining = header_remaining. split_at_mut ( read) . 1 ;
93- }
87+ read_exact_at_borrowed ! ( file, 0 , & mut header_bytes[ ..] ) ?;
9488 let header = decode_segment_header ( & header_bytes, & hk, page_size) ?;
9589 validate_header ( & header, meta, parent_file_id, page_size) ?;
9690
9791 let mut footer_bytes = vec ! [ 0u8 ; page_size] ;
98- let mut next_footer_offset = footer_offset;
99- let mut footer_remaining = & mut footer_bytes[ ..] ;
100- while !footer_remaining. is_empty ( ) {
101- let read = file. read_at ( next_footer_offset, footer_remaining) . await ?;
102- checked_read_progress ( & mut next_footer_offset, read, footer_remaining. len ( ) ) ?;
103- footer_remaining = footer_remaining. split_at_mut ( read) . 1 ;
104- }
92+ read_exact_at_borrowed ! ( file, footer_offset, & mut footer_bytes[ ..] ) ?;
10593 let ( footer, manifest) = {
10694 let mut lru = pager. dek_lru ( ) . lock ( ) ;
10795 let cipher = lru. get_or_derive ( meta. realm_id , meta. mk_epoch , cipher_id, & master_key) ?;
@@ -337,13 +325,7 @@ async fn collect_and_decode_index_page<V: Vfs + Clone>(
337325 . checked_mul ( page_size_u64)
338326 . ok_or_else ( || PagedbError :: segment_geometry_invalid ( "index.offset" ) ) ?;
339327 let mut page = vec ! [ 0u8 ; context. page_size] ;
340- let mut read_offset = offset;
341- let mut remaining = & mut page[ ..] ;
342- while !remaining. is_empty ( ) {
343- let read = context. file . read_at ( read_offset, remaining) . await ?;
344- checked_read_progress ( & mut read_offset, read, remaining. len ( ) ) ?;
345- remaining = remaining. split_at_mut ( read) . 1 ;
346- }
328+ read_exact_at_borrowed ! ( context. file, offset, & mut page[ ..] ) ?;
347329 let ( cipher_id, mk_epoch) = extract_page_header_ids ( & page) ?;
348330 if cipher_id != context. cipher_id {
349331 return Err ( PagedbError :: segment_metadata_mismatch (
0 commit comments