@@ -752,60 +752,23 @@ impl<M: Memory> Storage for StableStorage<M> {
752752 . ok_or ( Error :: NoSuchFileOrDirectory )
753753 }
754754
755- fn get_direntries (
756- & self ,
757- node : Node ,
758- initial_index : Option < DirEntryIndex > ,
759- ) -> Result < Vec < ( DirEntryIndex , DirEntry ) > , Error > {
760- let mut res = Vec :: new ( ) ;
761-
762- if initial_index. is_none ( ) {
763- let mut dot_entry = DUMMY_DOT_ENTRY ;
764- dot_entry. 1 . node = node;
765- res. push ( dot_entry) ;
766- res. push ( DUMMY_DOT_DOT_ENTRY ) ;
767- }
768-
769- let initial_index = initial_index. unwrap_or ( 0 ) ;
770-
771- if initial_index == DUMMY_DOT_ENTRY_INDEX {
772- let mut dot_entry = DUMMY_DOT_ENTRY ;
773- dot_entry. 1 . node = node;
774- res. push ( dot_entry) ;
775- res. push ( DUMMY_DOT_DOT_ENTRY ) ;
776- }
777-
778- if initial_index == DUMMY_DOT_DOT_ENTRY_INDEX {
779- res. push ( DUMMY_DOT_DOT_ENTRY ) ;
780- }
781-
782- let max_index = MAX_FILE_ENTRY_INDEX ;
783-
784- for en in self
785- . direntry
786- . range ( ( node, initial_index) ..( node, max_index) )
787- {
788- let ( _node, index) = * en. key ( ) ;
789- let entry = en. value ( ) ;
790-
791- res. push ( ( index, entry) ) ;
792- }
793-
794- Ok ( res)
795- }
796-
797755 fn with_direntries (
798756 & self ,
799757 node : Node ,
800758 initial_index : Option < DirEntryIndex > ,
801- f : & mut dyn FnMut ( & DirEntryIndex , & DirEntry ) ,
759+ f : & mut dyn FnMut ( & DirEntryIndex , & DirEntry ) -> bool ,
802760 ) {
803761 if initial_index. is_none ( ) {
804762 let mut dot_entry = DUMMY_DOT_ENTRY ;
805763 dot_entry. 1 . node = node;
806764
807- f ( & dot_entry. 0 , & dot_entry. 1 ) ;
808- f ( & DUMMY_DOT_DOT_ENTRY . 0 , & DUMMY_DOT_DOT_ENTRY . 1 ) ;
765+ if !f ( & dot_entry. 0 , & dot_entry. 1 ) {
766+ return ;
767+ }
768+
769+ if !f ( & DUMMY_DOT_DOT_ENTRY . 0 , & DUMMY_DOT_DOT_ENTRY . 1 ) {
770+ return ;
771+ }
809772 }
810773
811774 let initial_index = initial_index. unwrap_or ( 0 ) ;
@@ -814,12 +777,19 @@ impl<M: Memory> Storage for StableStorage<M> {
814777 let mut dot_entry = DUMMY_DOT_ENTRY ;
815778 dot_entry. 1 . node = node;
816779
817- f ( & dot_entry. 0 , & dot_entry. 1 ) ;
818- f ( & DUMMY_DOT_DOT_ENTRY . 0 , & DUMMY_DOT_DOT_ENTRY . 1 ) ;
780+ if !f ( & dot_entry. 0 , & dot_entry. 1 ) {
781+ return ;
782+ }
783+
784+ if !f ( & DUMMY_DOT_DOT_ENTRY . 0 , & DUMMY_DOT_DOT_ENTRY . 1 ) {
785+ return ;
786+ }
819787 }
820788
821- if initial_index == DUMMY_DOT_DOT_ENTRY_INDEX {
822- f ( & DUMMY_DOT_DOT_ENTRY . 0 , & DUMMY_DOT_DOT_ENTRY . 1 ) ;
789+ if initial_index == DUMMY_DOT_DOT_ENTRY_INDEX
790+ && !f ( & DUMMY_DOT_DOT_ENTRY . 0 , & DUMMY_DOT_DOT_ENTRY . 1 )
791+ {
792+ return ;
823793 }
824794
825795 let max_index = MAX_FILE_ENTRY_INDEX ;
@@ -828,11 +798,12 @@ impl<M: Memory> Storage for StableStorage<M> {
828798 . direntry
829799 . range ( ( node, initial_index) ..( node, max_index) )
830800 {
831- let ( _node, index) = en. key ( ) ;
832-
801+ let ( _node, index) = * en. key ( ) ;
833802 let entry = en. value ( ) ;
834803
835- f ( index, & entry) ;
804+ if !f ( & index, & entry) {
805+ return ;
806+ }
836807 }
837808 }
838809
0 commit comments