github.com/bodgit/sevenzip@v1.5.1/internal/bzip2/reader.go (about)

     1  package bzip2
     2  
     3  import (
     4  	"compress/bzip2"
     5  	"errors"
     6  	"io"
     7  )
     8  
     9  type readCloser struct {
    10  	c io.Closer
    11  	r io.Reader
    12  }
    13  
    14  func (rc *readCloser) Close() error {
    15  	var err error
    16  	if rc.c != nil {
    17  		err = rc.c.Close()
    18  		rc.c, rc.r = nil, nil
    19  	}
    20  
    21  	return err
    22  }
    23  
    24  func (rc *readCloser) Read(p []byte) (int, error) {
    25  	if rc.r == nil {
    26  		return 0, errors.New("bzip2: Read after Close")
    27  	}
    28  
    29  	return rc.r.Read(p)
    30  }
    31  
    32  // NewReader returns a new bzip2 io.ReadCloser.
    33  func NewReader(_ []byte, _ uint64, readers []io.ReadCloser) (io.ReadCloser, error) {
    34  	if len(readers) != 1 {
    35  		return nil, errors.New("bzip2: need exactly one reader")
    36  	}
    37  
    38  	return &readCloser{
    39  		c: readers[0],
    40  		r: bzip2.NewReader(readers[0]),
    41  	}, nil
    42  }