123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- 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
- }
|