Fixed issues with fragments

This commit is contained in:
Caleb Gardner
2022-08-26 12:11:27 -05:00
parent 4efd2ee49d
commit 327781d86e
3 changed files with 21 additions and 12 deletions
+2 -2
View File
@@ -9,7 +9,7 @@ import (
type fileInit struct {
BlockStart uint32
FragInd uint32
Offset uint32
FragOffset uint32
Size uint32
}
@@ -24,7 +24,7 @@ type eFileInit struct {
Sparse uint64
LinkCount uint32
FragInd uint32
Offset uint32
FragOffset uint32
XattrInd uint32
}
+16 -8
View File
@@ -37,13 +37,13 @@ func (r Reader) getReaders(i inode.Inode) (full *data.FullReader, rdr *data.Read
var fragInd uint32
var fragSize uint32
if i.Type == inode.Fil {
fragOffset = uint64(i.Data.(inode.File).Offset)
fragOffset = uint64(i.Data.(inode.File).FragOffset)
blockOffset = uint64(i.Data.(inode.File).BlockStart)
blockSizes = i.Data.(inode.File).BlockSizes
fragInd = i.Data.(inode.File).FragInd
fragSize = i.Data.(inode.File).Size % r.s.BlockSize
} else if i.Type == inode.EFil {
fragOffset = uint64(i.Data.(inode.EFile).Offset)
fragOffset = uint64(i.Data.(inode.EFile).FragOffset)
blockOffset = i.Data.(inode.EFile).BlockStart
blockSizes = i.Data.(inode.EFile).BlockSizes
fragInd = i.Data.(inode.EFile).FragInd
@@ -60,9 +60,13 @@ func (r Reader) getReaders(i inode.Inode) (full *data.FullReader, rdr *data.Read
if err != nil {
return nil, err
}
_, err = fragRdr.Read(make([]byte, fragOffset))
if err != nil {
return nil, err
var n, tmpN int
for n != int(fragOffset) {
tmpN, err = fragRdr.Read(make([]byte, int(fragOffset)-n))
if err != nil {
return nil, err
}
n += tmpN
}
fragRdr = io.LimitReader(fragRdr, int64(fragSize))
return fragRdr, nil
@@ -72,9 +76,13 @@ func (r Reader) getReaders(i inode.Inode) (full *data.FullReader, rdr *data.Read
if err != nil {
return nil, nil, err
}
_, err = fragRdr.Read(make([]byte, fragOffset))
if err != nil {
return nil, nil, err
var n, tmpN int
for n != int(fragOffset) {
tmpN, err = fragRdr.Read(make([]byte, int(fragOffset)-n))
if err != nil {
return nil, nil, err
}
n += tmpN
}
fragRdr = io.LimitReader(fragRdr, int64(fragSize))
rdr.AddFragment(fragRdr)
+3 -2
View File
@@ -19,9 +19,9 @@ import (
const (
squashfsURL = "https://darkstorm.tech/LinuxPATest.sfs"
squashfsName = "out.sfs"
squashfsName = "LinuxPATest.sfs"
filePath = "PortableApps/Desktop.ini"
filePath = "PortableApps/Notepad++Portable/App/DefaultData/Config/contextMenu.xml"
)
func preTest(dir string) (fil *os.File, err error) {
@@ -153,6 +153,7 @@ func TestSingleFile(t *testing.T) {
if err != nil {
t.Fatal(err)
}
os.Remove(filepath.Base(filePath))
rdr, err := squashfs.NewReader(fil)
if err != nil {
t.Fatal(err)