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 }