| 119 | } |
| 120 | |
| 121 | func (fr *fileReader) Close() error { |
| 122 | if fr.rc == nil { |
| 123 | return nil |
| 124 | } |
| 125 | |
| 126 | offset, err := fr.rc.Seek(0, io.SeekCurrent) |
| 127 | if err != nil { |
| 128 | return fmt.Errorf("sevenzip: error seeking current position: %w", err) |
| 129 | } |
| 130 | |
| 131 | if offset == fr.rc.Size() { // EOF reached |
| 132 | if err := fr.rc.Close(); err != nil { |
| 133 | return fmt.Errorf("sevenzip: error closing: %w", err) |
| 134 | } |
| 135 | } else { |
| 136 | f := fr.f |
| 137 | if _, err := f.zip.pool[f.folder].Put(offset, fr.rc); err != nil { |
| 138 | return fmt.Errorf("sevenzip: error adding to pool: %w", err) |
| 139 | } |
| 140 | } |
| 141 | |
| 142 | fr.rc = nil |
| 143 | |
| 144 | return nil |
| 145 | } |
| 146 | |
| 147 | // Open returns an [io.ReadCloser] that provides access to the [File]'s |
| 148 | // contents. Multiple files may be read concurrently. |