MCPcopy Create free account
hub / github.com/bodgit/sevenzip / openReader

Function openReader

reader.go:190–250  ·  view source on GitHub ↗
(fs afero.Fs, name string)

Source from the content-addressed store, hash-verified

188}
189
190func openReader(fs afero.Fs, name string) (io.ReaderAt, int64, []afero.File, error) {
191 f, err := fs.Open(filepath.Clean(name))
192 if err != nil {
193 return nil, 0, nil, fmt.Errorf("sevenzip: error opening: %w", err)
194 }
195
196 info, err := f.Stat()
197 if err != nil {
198 err = errors.Join(err, f.Close())
199
200 return nil, 0, nil, fmt.Errorf("sevenzip: error retrieving file info: %w", err)
201 }
202
203 var reader io.ReaderAt = f
204
205 size := info.Size()
206 files := []afero.File{f}
207
208 if ext := filepath.Ext(name); ext == ".001" {
209 sr := []readerutil.SizeReaderAt{io.NewSectionReader(f, 0, size)}
210
211 for i := 2; true; i++ {
212 f, err := fs.Open(fmt.Sprintf("%s.%03d", strings.TrimSuffix(name, ext), i))
213 if err != nil {
214 if errors.Is(err, iofs.ErrNotExist) {
215 break
216 }
217
218 errs := make([]error, 0, len(files)+1)
219 errs = append(errs, err)
220
221 for _, file := range files {
222 errs = append(errs, file.Close())
223 }
224
225 return nil, 0, nil, fmt.Errorf("sevenzip: error opening: %w", errors.Join(errs...))
226 }
227
228 files = append(files, f)
229
230 info, err = f.Stat()
231 if err != nil {
232 errs := make([]error, 0, len(files)+1)
233 errs = append(errs, err)
234
235 for _, file := range files {
236 errs = append(errs, file.Close())
237 }
238
239 return nil, 0, nil, fmt.Errorf("sevenzip: error retrieving file info: %w", errors.Join(errs...))
240 }
241
242 sr = append(sr, io.NewSectionReader(f, 0, info.Size()))
243 }
244
245 mr := readerutil.NewMultiReaderAt(sr...)
246 reader, size = mr, mr.Size()
247 }

Callers 2

OpenReaderWithPasswordFunction · 0.85
TestOpenReaderFunction · 0.85

Calls 4

SizeMethod · 0.65
OpenMethod · 0.45
StatMethod · 0.45
CloseMethod · 0.45

Tested by 1

TestOpenReaderFunction · 0.68

Used in the wild real call sites across dependent graphs

searching dependent graphs…