PERFORMANCE
Changed some struct values from pointers to normal values for improved performance.
This commit is contained in:
@@ -19,16 +19,16 @@ import (
|
||||
|
||||
// File represents a file inside a squashfs archive.
|
||||
type File struct {
|
||||
b *squashfslow.FileBase
|
||||
full *data.FullReader
|
||||
rdr *data.Reader
|
||||
parent *FS
|
||||
r *Reader
|
||||
b squashfslow.FileBase
|
||||
dirsRead int
|
||||
}
|
||||
|
||||
// Creates a new *File from the given *squashfs.Base
|
||||
func (r *Reader) FileFromBase(b *squashfslow.FileBase, parent *FS) *File {
|
||||
func (r *Reader) FileFromBase(b squashfslow.FileBase, parent *FS) *File {
|
||||
return &File{
|
||||
b: b,
|
||||
parent: parent,
|
||||
@@ -40,7 +40,7 @@ func (f *File) FS() (*FS, error) {
|
||||
if !f.IsDir() {
|
||||
return nil, errors.New("not a directory")
|
||||
}
|
||||
d, err := f.b.ToDir(f.r.Low)
|
||||
d, err := f.b.ToDir(&f.r.Low)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -114,7 +114,7 @@ func (f *File) ReadDir(n int) ([]fs.DirEntry, error) {
|
||||
if !f.IsDir() {
|
||||
return nil, errors.New("file is not a directory")
|
||||
}
|
||||
d, err := f.b.ToDir(f.r.Low)
|
||||
d, err := f.b.ToDir(&f.r.Low)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -142,7 +142,7 @@ func (f *File) ReadDir(n int) ([]fs.DirEntry, error) {
|
||||
|
||||
// Returns the file's fs.FileInfo
|
||||
func (f *File) Stat() (fs.FileInfo, error) {
|
||||
return newFileInfo(f.b.Name, f.b.Inode), nil
|
||||
return newFileInfo(f.b.Name, &f.b.Inode), nil
|
||||
}
|
||||
|
||||
// SymlinkPath returns the symlink's target path. Is the File isn't a symlink, returns an empty string.
|
||||
@@ -173,7 +173,7 @@ func (f *File) WriteTo(w io.Writer) (int64, error) {
|
||||
|
||||
func (f *File) initializeReaders() error {
|
||||
var err error
|
||||
f.rdr, f.full, err = f.b.GetRegFileReaders(f.r.Low)
|
||||
f.rdr, f.full, err = f.b.GetRegFileReaders(&f.r.Low)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -218,7 +218,7 @@ func (f *File) ExtractWithOptions(path string, op *ExtractionOptions) error {
|
||||
}
|
||||
switch f.b.Inode.Type {
|
||||
case inode.Dir, inode.EDir:
|
||||
d, err := f.b.ToDir(f.r.Low)
|
||||
d, err := f.b.ToDir(&f.r.Low)
|
||||
if err != nil {
|
||||
if op.Verbose {
|
||||
log.Println("Failed to create squashfs.Directory for", path)
|
||||
@@ -234,7 +234,7 @@ func (f *File) ExtractWithOptions(path string, op *ExtractionOptions) error {
|
||||
}
|
||||
return errors.Join(errors.New("failed to get base from entry: "+path), err)
|
||||
}
|
||||
go func(b *squashfslow.FileBase, path string) {
|
||||
go func(b squashfslow.FileBase, path string) {
|
||||
i := op.manager.Lock()
|
||||
if b.IsDir() {
|
||||
extDir := filepath.Join(path, b.Name)
|
||||
@@ -285,7 +285,7 @@ func (f *File) ExtractWithOptions(path string, op *ExtractionOptions) error {
|
||||
return errors.Join(errors.New("failed to create file: "+path), err)
|
||||
}
|
||||
defer outFil.Close()
|
||||
full, err := f.b.GetFullReader(f.r.Low)
|
||||
full, err := f.b.GetFullReader(&f.r.Low)
|
||||
if err != nil {
|
||||
if op.Verbose {
|
||||
log.Println("Failed to create full reader for", path)
|
||||
@@ -406,7 +406,7 @@ func (f *File) ExtractWithOptions(path string, op *ExtractionOptions) error {
|
||||
if op.IgnorePerm {
|
||||
return nil
|
||||
}
|
||||
uid, err := f.b.Uid(f.r.Low)
|
||||
uid, err := f.b.Uid(&f.r.Low)
|
||||
if err != nil {
|
||||
if op.Verbose {
|
||||
log.Println("Failed to get uid for", path)
|
||||
@@ -414,7 +414,7 @@ func (f *File) ExtractWithOptions(path string, op *ExtractionOptions) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
gid, err := f.b.Gid(f.r.Low)
|
||||
gid, err := f.b.Gid(&f.r.Low)
|
||||
if err != nil {
|
||||
if op.Verbose {
|
||||
log.Println("Failed to get gid for", path)
|
||||
|
||||
Reference in New Issue
Block a user