@@ -252,42 +252,40 @@ func (z *Reader) Read(p []byte) (n int, err error) {
252
252
return 0 , z .err
253
253
}
254
254
255
- n , z .err = z .decompressor .Read (p )
256
- z .digest = crc32 .Update (z .digest , crc32 .IEEETable , p [:n ])
257
- z .size += uint32 (n )
258
- if z .err != io .EOF {
259
- // In the normal case we return here.
260
- return n , z .err
261
- }
255
+ for n == 0 {
256
+ n , z .err = z .decompressor .Read (p )
257
+ z .digest = crc32 .Update (z .digest , crc32 .IEEETable , p [:n ])
258
+ z .size += uint32 (n )
259
+ if z .err != io .EOF {
260
+ // In the normal case we return here.
261
+ return n , z .err
262
+ }
262
263
263
- // Finished file; check checksum and size.
264
- if _ , err := io .ReadFull (z .r , z .buf [:8 ]); err != nil {
265
- z .err = noEOF (err )
266
- return n , z .err
267
- }
268
- digest := le .Uint32 (z .buf [:4 ])
269
- size := le .Uint32 (z .buf [4 :8 ])
270
- if digest != z .digest || size != z .size {
271
- z .err = ErrChecksum
272
- return n , z .err
273
- }
274
- z .digest , z .size = 0 , 0
264
+ // Finished file; check checksum and size.
265
+ if _ , err := io .ReadFull (z .r , z .buf [:8 ]); err != nil {
266
+ z .err = noEOF (err )
267
+ return n , z .err
268
+ }
269
+ digest := le .Uint32 (z .buf [:4 ])
270
+ size := le .Uint32 (z .buf [4 :8 ])
271
+ if digest != z .digest || size != z .size {
272
+ z .err = ErrChecksum
273
+ return n , z .err
274
+ }
275
+ z .digest , z .size = 0 , 0
275
276
276
- // File is ok; check if there is another.
277
- if ! z .multistream {
278
- return n , io .EOF
279
- }
280
- z .err = nil // Remove io.EOF
277
+ // File is ok; check if there is another.
278
+ if ! z .multistream {
279
+ return n , io .EOF
280
+ }
281
+ z .err = nil // Remove io.EOF
281
282
282
- if _ , z .err = z .readHeader (); z .err != nil {
283
- return n , z .err
283
+ if _ , z .err = z .readHeader (); z .err != nil {
284
+ return n , z .err
285
+ }
284
286
}
285
287
286
- // Read from next file, if necessary.
287
- if n > 0 {
288
- return n , nil
289
- }
290
- return z .Read (p )
288
+ return n , nil
291
289
}
292
290
293
291
// Support the io.WriteTo interface for io.Copy and friends.
0 commit comments