Restructure for 1.16 io/fs interface
This commit is contained in:
@@ -23,38 +23,33 @@ type EntryRaw struct {
|
||||
|
||||
//Entry is an entry in a directory.
|
||||
type Entry struct {
|
||||
*Header
|
||||
Name string
|
||||
EntryRaw
|
||||
Name string
|
||||
InodeOffset uint32
|
||||
InodeBlockOffset int16
|
||||
Type uint16
|
||||
}
|
||||
|
||||
//NewEntry creates a new directory entry
|
||||
func NewEntry(rdr io.Reader) (Entry, error) {
|
||||
var entry Entry
|
||||
err := binary.Read(rdr, binary.LittleEndian, &entry.EntryRaw)
|
||||
func NewEntry(rdr io.Reader) (*Entry, error) {
|
||||
var raw EntryRaw
|
||||
err := binary.Read(rdr, binary.LittleEndian, &raw)
|
||||
if err != nil {
|
||||
return Entry{}, err
|
||||
return nil, err
|
||||
}
|
||||
tmp := make([]byte, entry.EntryRaw.NameSize+1)
|
||||
tmp := make([]byte, raw.NameSize+1)
|
||||
err = binary.Read(rdr, binary.LittleEndian, &tmp)
|
||||
if err != nil {
|
||||
return Entry{}, err
|
||||
return nil, err
|
||||
}
|
||||
entry.Name = string(tmp)
|
||||
return entry, err
|
||||
}
|
||||
|
||||
//Directory is an entry in the directory table of a squashfs.
|
||||
//Will only have multiple headers if there are more then 256 entries
|
||||
type Directory struct {
|
||||
Headers []Header
|
||||
Entries []Entry
|
||||
return &Entry{
|
||||
InodeBlockOffset: raw.InodeOffset,
|
||||
Type: raw.Type,
|
||||
Name: string(tmp),
|
||||
}, nil
|
||||
}
|
||||
|
||||
//NewDirectory reads the directory from rdr
|
||||
func NewDirectory(base io.Reader, size uint32) (*Directory, error) {
|
||||
var dir Directory
|
||||
var err error
|
||||
func NewDirectory(base io.Reader, size uint32) (entries []*Entry, err error) {
|
||||
tmp := make([]byte, size)
|
||||
base.Read(tmp)
|
||||
rdr := bytes.NewBuffer(tmp)
|
||||
@@ -62,6 +57,7 @@ func NewDirectory(base io.Reader, size uint32) (*Directory, error) {
|
||||
var hdr Header
|
||||
err = binary.Read(rdr, binary.LittleEndian, &hdr)
|
||||
if err == io.ErrUnexpectedEOF {
|
||||
err = nil
|
||||
break
|
||||
} else if err != nil {
|
||||
return nil, err
|
||||
@@ -71,24 +67,21 @@ func NewDirectory(base io.Reader, size uint32) (*Directory, error) {
|
||||
if hdr.Count%256 > 0 {
|
||||
headers++
|
||||
}
|
||||
dir.Headers = append(dir.Headers, hdr)
|
||||
for i := uint32(0); i < hdr.Count; i++ {
|
||||
if i != 0 && i%256 == 0 {
|
||||
var newHdr Header
|
||||
err = binary.Read(rdr, binary.LittleEndian, &newHdr)
|
||||
err = binary.Read(rdr, binary.LittleEndian, &hdr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
dir.Headers = append(dir.Headers, newHdr)
|
||||
}
|
||||
var ent Entry
|
||||
var ent *Entry
|
||||
ent, err = NewEntry(rdr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ent.Header = &dir.Headers[len(dir.Headers)-1]
|
||||
dir.Entries = append(dir.Entries, ent)
|
||||
ent.InodeOffset = hdr.InodeOffset
|
||||
entries = append(entries, ent)
|
||||
}
|
||||
}
|
||||
return &dir, nil
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user