blob: 453f4e22bcbb022b9a976e24af84f8c23e69985c [file] [edit]
package tar2go
import (
"archive/tar"
"io"
"io/fs"
"time"
)
type file struct {
idx *indexReader
rdr *io.SectionReader
}
func newFile(idx *indexReader) *file {
return &file{idx: idx, rdr: io.NewSectionReader(idx.rdr, idx.offset, idx.size)}
}
type fileinfo struct {
h *tar.Header
}
func (f *fileinfo) Name() string {
return f.h.Name
}
func (f *fileinfo) Size() int64 {
return f.h.Size
}
func (f *fileinfo) Mode() fs.FileMode {
return fs.FileMode(f.h.Mode)
}
func (f *fileinfo) ModTime() time.Time {
return f.h.ModTime
}
func (f *fileinfo) IsDir() bool {
return f.h.Typeflag == tar.TypeDir
}
func (f *file) Close() error {
return nil
}
func (f *fileinfo) Sys() interface{} {
h := *f.h
return &h
}
func (f *file) Read(p []byte) (int, error) {
return f.rdr.Read(p)
}
func (f *file) ReadAt(p []byte, off int64) (int, error) {
return f.rdr.ReadAt(p, off)
}
func (f *file) Size() int64 {
return f.rdr.Size()
}
func (f *file) Stat() (fs.FileInfo, error) {
return &fileinfo{h: f.idx.hdr}, nil
}