17d45eea50
Added FastOptions as an alternative to DefaultOptions A few performance improvements A few bug fixes
50 lines
1.6 KiB
Go
50 lines
1.6 KiB
Go
package squashfs
|
|
|
|
import (
|
|
"io"
|
|
"io/fs"
|
|
"runtime"
|
|
|
|
"github.com/CalebQ42/squashfs/internal/routinemanager"
|
|
)
|
|
|
|
type ExtractionOptions struct {
|
|
manager *routinemanager.Manager
|
|
LogOutput io.Writer //Where the verbose log should write.
|
|
DereferenceSymlink bool //Replace symlinks with the target file.
|
|
UnbreakSymlink bool //Try to make sure symlinks remain unbroken when extracted, without changing the symlink.
|
|
Verbose bool //Prints extra info to log on an error.
|
|
IgnorePerm bool //Ignore file's permissions and instead use Perm.
|
|
Perm fs.FileMode //Permission to use when IgnorePerm. Defaults to 0777.
|
|
SimultaneousFiles uint16 //Number of files to process in parallel. Default set based on runtime.NumCPU().
|
|
ExtractionRoutines uint16 //Number of goroutines to use for each file's extraction. Only applies to regular files. Default set based on runtime.NumCPU().
|
|
}
|
|
|
|
// The default extraction options.
|
|
func DefaultOptions() *ExtractionOptions {
|
|
cores := uint16(runtime.NumCPU() / 2)
|
|
var files, routines uint16
|
|
if cores <= 4 {
|
|
files = 1
|
|
routines = cores
|
|
} else {
|
|
files = cores - 4
|
|
routines = 4
|
|
}
|
|
return &ExtractionOptions{
|
|
Perm: 0777,
|
|
SimultaneousFiles: files,
|
|
ExtractionRoutines: routines,
|
|
}
|
|
}
|
|
|
|
// Less limited default options. Can run up 2x faster than DefaultOptions.
|
|
// Tends to use all available CPU resources.
|
|
func FastOptions() *ExtractionOptions {
|
|
return &ExtractionOptions{
|
|
Perm: 0777,
|
|
SimultaneousFiles: uint16(runtime.NumCPU()),
|
|
ExtractionRoutines: uint16(runtime.NumCPU()),
|
|
}
|
|
}
|