@@ -141,10 +141,10 @@ impl File {
141
141
// From oldest to most recent, apply all deltas, swapping the buffer back and forth
142
142
// TODO: once we have more tests, we could optimize this memory-intensive work to
143
143
// analyse the delta-chains to only copy data once.
144
+ // `out` is: [source-buffer][target-buffer][max-delta-instructions-buffer]
144
145
let ( buffers, instructions) = out. split_at_mut ( second_buffer_end) ;
145
146
let ( mut source_buf, mut target_buf) = buffers. split_at_mut ( first_buffer_end) ;
146
147
147
- // `out` is: [source-buffer][target-buffer][delta-1..delta-n]
148
148
let mut last_result_size = None ;
149
149
for (
150
150
delta_idx,
@@ -156,18 +156,15 @@ impl File {
156
156
{
157
157
let data = & mut instructions[ ..* decompressed_size] ;
158
158
self . decompress_entry_inner ( * pack_offset, data) ?;
159
- let mut offset = 0 ;
160
- let ( base_size, consumed) = delta_header_size ( data) ;
161
- offset += consumed;
162
- let ( result_size, consumed) = delta_header_size ( & data[ consumed..] ) ;
163
- offset += consumed;
159
+ let ( base_size, data) = delta_header_size ( data) ;
160
+ let ( result_size, data) = delta_header_size ( data) ;
164
161
if delta_idx + 1 == chain. len ( ) {
165
162
last_result_size = Some ( result_size) ;
166
163
}
167
164
apply_delta (
168
165
& source_buf[ ..base_size as usize ] ,
169
166
& mut target_buf[ ..result_size as usize ] ,
170
- & data[ offset.. ] ,
167
+ data,
171
168
) ;
172
169
// use the target as source for the next delta
173
170
std:: mem:: swap ( & mut source_buf, & mut target_buf) ;
@@ -236,7 +233,7 @@ fn apply_delta(base: &[u8], mut target: &mut [u8], mut data: &[u8]) {
236
233
}
237
234
}
238
235
239
- fn delta_header_size ( d : & [ u8 ] ) -> ( u64 , usize ) {
236
+ fn delta_header_size ( d : & [ u8 ] ) -> ( u64 , & [ u8 ] ) {
240
237
let mut i = 0 ;
241
238
let mut size = 0u64 ;
242
239
let mut consumed = 0 ;
@@ -248,5 +245,5 @@ fn delta_header_size(d: &[u8]) -> (u64, usize) {
248
245
break ;
249
246
}
250
247
}
251
- ( size, consumed)
248
+ ( size, & d [ consumed.. ] )
252
249
}
0 commit comments