@@ -304,7 +304,7 @@ impl<'a> ApcbIterMut<'a> {
304304 & ' _ mut self ,
305305 group_id : GroupId ,
306306 ) -> Result < ( usize , usize ) > {
307- let group_id = group_id. to_u16 ( ) . unwrap ( ) ;
307+ let raw_group_id = group_id. to_u16 ( ) . unwrap ( ) ;
308308 let mut remaining_used_size = self . remaining_used_size ;
309309 let mut offset = 0usize ;
310310 loop {
@@ -314,7 +314,7 @@ impl<'a> ApcbIterMut<'a> {
314314 }
315315 let group = ApcbIterMut :: next_item ( self . context , & mut buf) ?;
316316 let group_size = group. header . group_size . get ( ) ;
317- if group. header . group_id . get ( ) == group_id {
317+ if group. header . group_id . get ( ) == raw_group_id {
318318 return Ok ( ( offset, group_size as usize ) ) ;
319319 }
320320 let group = ApcbIterMut :: next_item ( self . context , & mut self . buf ) ?;
@@ -329,7 +329,7 @@ impl<'a> ApcbIterMut<'a> {
329329 "GROUP_HEADER::group_size" ,
330330 ) ) ?;
331331 }
332- Err ( Error :: GroupNotFound )
332+ Err ( Error :: GroupNotFound { group_id } )
333333 }
334334
335335 pub ( crate ) fn next1 ( & mut self ) -> Result < GroupMutItem < ' a > > {
@@ -593,8 +593,9 @@ impl<'a> Apcb<'a> {
593593 board_instance_mask : BoardInstances ,
594594 ) -> Result < ( ) > {
595595 let group_id = entry_id. group_id ( ) ;
596- let mut group =
597- self . group_mut ( group_id) ?. ok_or ( Error :: GroupNotFound ) ?;
596+ let mut group = self
597+ . group_mut ( group_id) ?
598+ . ok_or ( Error :: GroupNotFound { group_id } ) ?;
598599 let size_diff =
599600 group. delete_entry ( entry_id, instance_id, board_instance_mask) ?;
600601 if size_diff > 0 {
@@ -661,7 +662,8 @@ impl<'a> Apcb<'a> {
661662 } else {
662663 return Err ( Error :: OutOfSpace ) ;
663664 }
664- let group = groups. next ( ) . ok_or ( Error :: GroupNotFound ) ?;
665+ let group =
666+ groups. next ( ) . ok_or ( Error :: GroupNotFound { group_id } ) ?;
665667 group. header . group_size . set ( new_group_size) ;
666668 let buf = & mut self . beginning_of_groups_mut ( ) ?[ offset..] ;
667669 if old_group_size as usize > old_used_size {
@@ -694,7 +696,8 @@ impl<'a> Apcb<'a> {
694696 FileSystemError :: InconsistentHeader ,
695697 "ENTRY_HEADER::entry_size" ,
696698 ) ) ?;
697- let group = groups. next ( ) . ok_or ( Error :: GroupNotFound ) ?;
699+ let group =
700+ groups. next ( ) . ok_or ( Error :: GroupNotFound { group_id } ) ?;
698701 group. header . group_size . set ( new_group_size) ;
699702 let buf = & mut self . beginning_of_groups_mut ( ) ?[ offset..] ;
700703 buf. copy_within (
@@ -703,7 +706,7 @@ impl<'a> Apcb<'a> {
703706 ) ;
704707 self . used_size = new_used_size;
705708 }
706- self . group_mut ( group_id) ?. ok_or ( Error :: GroupNotFound )
709+ self . group_mut ( group_id) ?. ok_or ( Error :: GroupNotFound { group_id } )
707710 }
708711 /// Note: board_instance_mask needs to be exact.
709712 #[ allow( clippy:: too_many_arguments) ]
@@ -719,13 +722,18 @@ impl<'a> Apcb<'a> {
719722 payload_initializer : impl Fn ( & mut [ u8 ] ) ,
720723 ) -> Result < ( ) > {
721724 let group_id = entry_id. group_id ( ) ;
722- let mut group =
723- self . group_mut ( group_id) ?. ok_or ( Error :: GroupNotFound ) ?;
725+ let mut group = self
726+ . group_mut ( group_id) ?
727+ . ok_or ( Error :: GroupNotFound { group_id } ) ?;
724728 if group
725729 . entry_exact_mut ( entry_id, instance_id, board_instance_mask)
726730 . is_some ( )
727731 {
728- return Err ( Error :: EntryUniqueKeyViolation ) ;
732+ return Err ( Error :: EntryUniqueKeyViolation {
733+ entry_id,
734+ instance_id,
735+ board_instance_mask,
736+ } ) ;
729737 }
730738
731739 let mut entry_allocation: u16 = ( size_of :: < ENTRY_HEADER > ( ) as u16 )
@@ -983,15 +991,25 @@ impl<'a> Apcb<'a> {
983991 ) -> Result < ( ) > {
984992 let group_id = entry_id. group_id ( ) ;
985993 // Make sure that the entry exists before resizing the group
986- let group = self . group ( group_id) ?. ok_or ( Error :: GroupNotFound ) ?;
994+ let group =
995+ self . group ( group_id) ?. ok_or ( Error :: GroupNotFound { group_id } ) ?;
987996 let entry = group
988997 . entry_exact ( entry_id, instance_id, board_instance_mask)
989- . ok_or ( Error :: EntryNotFound ) ?;
998+ . ok_or ( Error :: EntryNotFound {
999+ entry_id,
1000+ instance_id,
1001+ board_instance_mask,
1002+ } ) ?;
9901003 let EntryItemBody :: < _ > :: Tokens ( a) = & entry. body else {
9911004 return Err ( Error :: EntryTypeMismatch ) ;
9921005 } ;
9931006 if a. token ( token_id) . is_some ( ) {
994- return Err ( Error :: TokenUniqueKeyViolation ) ;
1007+ return Err ( Error :: TokenUniqueKeyViolation {
1008+ entry_id,
1009+ instance_id,
1010+ board_instance_mask,
1011+ token_id,
1012+ } ) ;
9951013 }
9961014 // Tokens that destroy the alignment in the container have not been
9971015 // tested, are impossible right now anyway and have never been seen. So
@@ -1013,7 +1031,7 @@ impl<'a> Apcb<'a> {
10131031 token_id,
10141032 token_value,
10151033 ) ;
1016- if let Err ( Error :: EntryNotFound ) = rv {
1034+ if let Err ( Error :: EntryNotFound { .. } ) = rv {
10171035 panic ! (
10181036 "Internal error: Entry (entry_id = {entry_id:?}, \
10191037 instance_id = {instance_id:?}, \
@@ -1034,8 +1052,9 @@ impl<'a> Apcb<'a> {
10341052 ) -> Result < ( ) > {
10351053 let group_id = entry_id. group_id ( ) ;
10361054 // Make sure that the entry exists before resizing the group
1037- let mut group =
1038- self . group_mut ( group_id) ?. ok_or ( Error :: GroupNotFound ) ?;
1055+ let mut group = self
1056+ . group_mut ( group_id) ?
1057+ . ok_or ( Error :: GroupNotFound { group_id } ) ?;
10391058 let token_diff = group. delete_token (
10401059 entry_id,
10411060 instance_id,
@@ -1088,17 +1107,17 @@ impl<'a> Apcb<'a> {
10881107 GroupId :: Token => signature == * b"TOKN" ,
10891108 GroupId :: Unknown ( _) => true ,
10901109 } {
1091- return Err ( Error :: GroupTypeMismatch ) ;
1110+ return Err ( Error :: GroupTypeMismatch { group_id , signature } ) ;
10921111 }
10931112
10941113 let mut groups = self . groups_mut ( ) ?;
10951114 match groups. move_point_to ( group_id) {
1096- Err ( Error :: GroupNotFound ) => { }
1115+ Err ( Error :: GroupNotFound { .. } ) => { }
10971116 Err ( x) => {
10981117 return Err ( x) ;
10991118 }
11001119 _ => {
1101- return Err ( Error :: GroupUniqueKeyViolation ) ;
1120+ return Err ( Error :: GroupUniqueKeyViolation { group_id } ) ;
11021121 }
11031122 }
11041123
0 commit comments