func (r *Reader) Next() (*FileHeader, error) {
	if r.solidr != nil {
		// solid files must be read fully to update decoder information
		if _, err := io.Copy(ioutil.Discard, r.solidr); err != nil {
			return nil, err
		}
	}

	h, err := r.pr.next() // skip to next file
	if err != nil {
		return nil, err
	}
	r.solidr = nil

	br := byteReader(&r.pr) // start with packed file reader

	// check for encryption
	if len(h.key) > 0 && len(h.iv) > 0 {
		br = newAesDecryptReader(br, h.key, h.iv) // decrypt
	}
	r.r = br
	// check for compression
	if h.decoder != nil {
		err = r.dr.init(br, h.decoder, h.winSize, !h.solid)
		if err != nil {
			return nil, err
		}
		r.r = &r.dr
		if r.pr.r.isSolid() {
			r.solidr = r.r
		}
	}
	if h.UnPackedSize >= 0 && !h.UnKnownSize {
		// Limit reading to UnPackedSize as there may be padding
		r.r = &limitedReader{r.r, h.UnPackedSize, errShortFile}
	}
	r.cksum = h.cksum
	if r.cksum != nil {
		r.r = io.TeeReader(r.r, h.cksum) // write file data to checksum as it is read
	}
	fh := new(FileHeader)
	*fh = h.FileHeader
	return fh, nil
}
func (r *Reader) Next() (*FileHeader, error) {
	if r.solidr != nil {
		
		if _, err := io.Copy(ioutil.Discard, r.solidr); err != nil {
			return nil, err
		}
	}

	h, err := r.pr.next() 
	if err != nil {
		return nil, err
	}
	r.solidr = nil

	br := byteReader(&r.pr) 

	
	if len(h.key) > 0 && len(h.iv) > 0 {
		br = newAesDecryptReader(br, h.key, h.iv) 
	}
	r.r = br
	
	if h.decoder != nil {
		err = r.dr.init(br, h.decoder, h.winSize, !h.solid)
		if err != nil {
			return nil, err
		}
		r.r = &r.dr
		if r.pr.r.isSolid() {
			r.solidr = r.r
		}
	}
	if h.UnPackedSize >= 0 && !h.UnKnownSize {
		
		r.r = &limitedReader{r.r, h.UnPackedSize, errShortFile}
	}
	r.cksum = h.cksum
	if r.cksum != nil {
		r.r = io.TeeReader(r.r, h.cksum) 
	}
	fh := new(FileHeader)
	*fh = h.FileHeader
	return fh, nil
}
func ( r * Reader ) Next ( ) ( * FileHeader , error ) { if r . solidr != nil { // solid files must be read fully to update decoder information if _ , err := io . Copy ( ioutil . Discard , r . solidr ) ; err != nil { return nil , err } } h , err := r . pr . next ( ) // skip to next file if err != nil { return nil , err } r . solidr = nil br := byteReader ( & r . pr ) // start with packed file reader // check for encryption if len ( h . key ) > 0 && len ( h . iv ) > 0 { br = newAesDecryptReader ( br , h . key , h . iv ) // decrypt } r . r = br // check for compression if h . decoder != nil { err = r . dr . init ( br , h . decoder , h . winSize , ! h . solid ) if err != nil { return nil , err } r . r = & r . dr if r . pr . r . isSolid ( ) { r . solidr = r . r } } if h . UnPackedSize >= 0 && ! h . UnKnownSize { // Limit reading to UnPackedSize as there may be padding r . r = & limitedReader { r . r , h . UnPackedSize , errShortFile } } r . cksum = h . cksum if r . cksum != nil { r . r = io . TeeReader ( r . r , h . cksum ) // write file data to checksum as it is read } fh := new ( FileHeader ) * fh = h . FileHeader return fh , nil }
// Next advances to the next file in the archive.
Next advances to the next file in the archive .