@@ -778,13 +778,12 @@ accept_chunk([<<?MAGIC:4/unsigned,
778778 _TrailerSize :32 /unsigned ,
779779 FilterSize :8 /unsigned ,
780780 _Reserved :24 ,
781- _Filter :FilterSize /binary ,
782781 Data /binary >>
783782 | DataParts ] =
784783 Chunk ,
785784 #? MODULE {cfg = # cfg {}, mode = # write {tail_info = {Next , _ }}} =
786785 State0 ) ->
787- DataAndTrailer = [Data | DataParts ],
786+ DataAndTrailer = skip ( FilterSize , [Data | DataParts ]) ,
788787 validate_crc (Next , Crc , part (DataSize , DataAndTrailer )),
789788 % % assertion
790789 % true = iolist_size(DataAndTrailer) == (DataSize + TrailerSize),
@@ -2788,6 +2787,17 @@ part(Len, [B | L]) when Len > 0 ->
27882787 [binary :part (B , {0 , Len })]
27892788 end .
27902789
2790+ skip (0 , L ) ->
2791+ L ;
2792+ skip (Len , [B | L ]) when Len > 0 ->
2793+ S = byte_size (B ),
2794+ case Len < S of
2795+ true ->
2796+ [binary :part (B , {S , Len - S }) | L ];
2797+ false ->
2798+ skip (Len - S , L )
2799+ end .
2800+
27912801-spec recover_tracking (state ()) ->
27922802 osiris_tracking :state ().
27932803recover_tracking (#? MODULE {cfg = # cfg {directory = Dir ,
@@ -3232,6 +3242,7 @@ list_dir(Dir) ->
32323242 end .
32333243
32343244-ifdef (TEST ).
3245+ -include_lib (" eunit/include/eunit.hrl" ).
32353246
32363247
32373248part_test () ->
@@ -3240,4 +3251,12 @@ part_test() ->
32403251 [<<" AB" >>, <<" CDEF" >>] = part (6 , [<<" AB" >>, <<" CDEF" >>]),
32413252 ok .
32423253
3254+ skip_test () ->
3255+ [<<" EF" >>] = skip (4 , [<<" ABCDEF" >>]),
3256+ [<<" B" >>, <<" CDEF" >>] = skip (1 , [<<" AB" >>, <<" CDEF" >>]),
3257+ [<<" CDEF" >>] = skip (2 , [<<" AB" >>, <<" CDEF" >>]),
3258+ [<<" DEF" >>] = skip (3 , [<<" AB" >>, <<" CDEF" >>]),
3259+ [<<" AB" >>, <<" CDEF" >>] = skip (0 , [<<" AB" >>, <<" CDEF" >>]),
3260+ ok .
3261+
32433262-endif .
0 commit comments