Restructure for 1.16 io/fs interface
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
package squashfs
|
||||
|
||||
import (
|
||||
"io/fs"
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
"github.com/CalebQ42/squashfs/internal/directory"
|
||||
)
|
||||
|
||||
type FS struct {
|
||||
r *Reader
|
||||
parent *FS
|
||||
entries []*directory.Entry
|
||||
}
|
||||
|
||||
func (f FS) Open(name string) (fs.File, error) {
|
||||
if !fs.ValidPath(name) {
|
||||
return nil, &fs.PathError{
|
||||
Op: "open",
|
||||
Path: name,
|
||||
Err: fs.ErrInvalid,
|
||||
}
|
||||
}
|
||||
name = path.Clean(strings.TrimPrefix(name, "/"))
|
||||
split := strings.Split(name, "/")
|
||||
for i := 0; i < len(f.entries); i++ {
|
||||
if match, _ := path.Match(split[0], f.entries[i].Name); match {
|
||||
if len(split) == 1 {
|
||||
return f.r.newFileFromDirEntry(f.entries[i], &f)
|
||||
}
|
||||
sub, err := f.Sub(split[0])
|
||||
if err != nil {
|
||||
if pathErr, ok := err.(*fs.PathError); ok {
|
||||
pathErr.Op = "open"
|
||||
pathErr.Path = name
|
||||
return nil, err
|
||||
}
|
||||
return nil, &fs.PathError{
|
||||
Op: "open",
|
||||
Path: name,
|
||||
Err: err,
|
||||
}
|
||||
}
|
||||
fil, err := sub.Open(strings.Join(split[1:], "/"))
|
||||
if err != nil {
|
||||
if pathErr, ok := err.(*fs.PathError); ok {
|
||||
if pathErr.Err == fs.ErrNotExist {
|
||||
continue
|
||||
}
|
||||
pathErr.Op = "open"
|
||||
pathErr.Path = name
|
||||
return nil, err
|
||||
}
|
||||
return nil, &fs.PathError{
|
||||
Op: "open",
|
||||
Path: name,
|
||||
Err: err,
|
||||
}
|
||||
}
|
||||
return fil, nil
|
||||
}
|
||||
}
|
||||
return nil, &fs.PathError{
|
||||
Op: "open",
|
||||
Path: name,
|
||||
Err: fs.ErrNotExist,
|
||||
}
|
||||
}
|
||||
|
||||
func (f FS) Glob(pattern string) ([]string, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (f FS) ReadDir(name string) ([]DirEntry, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (f FS) ReadFile(name string) ([]byte, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (f FS) Stat(name string) ([]byte, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (f FS) Sub(dir string) (fs.FS, error) {
|
||||
return nil, nil
|
||||
}
|
||||
Reference in New Issue
Block a user