Minor tweaks
This commit is contained in:
@@ -16,5 +16,9 @@ func NewZstd() Zstd {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (z Zstd) Decompress(data []byte) ([]byte, error) {
|
func (z Zstd) Decompress(data []byte) ([]byte, error) {
|
||||||
return z.rdr.DecodeAll(data, nil)
|
dat, err := z.rdr.DecodeAll(data, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return dat, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,9 +49,6 @@ func (f *FullReader) AddFragData(blockStart uint64, blockSize uint32, offset uin
|
|||||||
_, err := f.rdr.ReadAt(dat, int64(blockStart))
|
_, err := f.rdr.ReadAt(dat, int64(blockStart))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
|
||||||
if realSize == 0 {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
if blockSize == realSize {
|
if blockSize == realSize {
|
||||||
dat, err = f.decomp.Decompress(dat)
|
dat, err = f.decomp.Decompress(dat)
|
||||||
|
|||||||
+7
-3
@@ -108,8 +108,12 @@ func (b FileBase) GetRegFileReaders(r Reader) (data.Reader, data.FullReader, err
|
|||||||
fileSize = b.Inode.Data.(inode.EFile).Size
|
fileSize = b.Inode.Data.(inode.EFile).Size
|
||||||
}
|
}
|
||||||
outFull := data.NewFullReader(r.r, r.d, r.Superblock.BlockSize, fileSize, blockStart, sizes)
|
outFull := data.NewFullReader(r.r, r.d, r.Superblock.BlockSize, fileSize, blockStart, sizes)
|
||||||
if fragIndex != 0xffffffff {
|
if fragIndex != 0xFFFFFFFF {
|
||||||
outFull.AddFragData(r.fragTable[fragIndex].Start, fragOffset, r.fragTable[fragIndex].Size)
|
ent, err := r.fragEntry(fragIndex)
|
||||||
|
if err != nil {
|
||||||
|
return data.Reader{}, data.FullReader{}, err
|
||||||
|
}
|
||||||
|
outFull.AddFragData(ent.Start, ent.Size, fragOffset)
|
||||||
}
|
}
|
||||||
outRdr, err := data.NewReader(&outFull)
|
outRdr, err := data.NewReader(&outFull)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -141,7 +145,7 @@ func (b FileBase) GetFullReader(r *Reader) (data.FullReader, error) {
|
|||||||
fileSize = b.Inode.Data.(inode.EFile).Size
|
fileSize = b.Inode.Data.(inode.EFile).Size
|
||||||
}
|
}
|
||||||
outFull := data.NewFullReader(r.r, r.d, r.Superblock.BlockSize, fileSize, blockStart, sizes)
|
outFull := data.NewFullReader(r.r, r.d, r.Superblock.BlockSize, fileSize, blockStart, sizes)
|
||||||
if fragIndex != 0xffffffff {
|
if fragIndex != 0xFFFFFFFF {
|
||||||
ent, err := r.fragEntry(fragIndex)
|
ent, err := r.fragEntry(fragIndex)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return data.FullReader{}, err
|
return data.FullReader{}, err
|
||||||
|
|||||||
+12
-12
@@ -20,10 +20,10 @@ func ReadFile(r io.Reader, blockSize uint32) (f File, err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
f.BlockStart = binary.LittleEndian.Uint32(dat)
|
f.BlockStart = binary.LittleEndian.Uint32(dat[0:4])
|
||||||
f.FragInd = binary.LittleEndian.Uint32(dat[4:])
|
f.FragInd = binary.LittleEndian.Uint32(dat[4:8])
|
||||||
f.FragOffset = binary.LittleEndian.Uint32(dat[8:])
|
f.FragOffset = binary.LittleEndian.Uint32(dat[8:12])
|
||||||
f.Size = binary.LittleEndian.Uint32(dat[12:])
|
f.Size = binary.LittleEndian.Uint32(dat[12:16])
|
||||||
toRead := int(math.Floor(float64(f.Size) / float64(blockSize)))
|
toRead := int(math.Floor(float64(f.Size) / float64(blockSize)))
|
||||||
if f.FragInd == 0xFFFFFFFF && f.Size%blockSize > 0 {
|
if f.FragInd == 0xFFFFFFFF && f.Size%blockSize > 0 {
|
||||||
toRead++
|
toRead++
|
||||||
@@ -57,14 +57,14 @@ func ReadEFile(r io.Reader, blockSize uint32) (f EFile, err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
f.BlockStart = binary.LittleEndian.Uint64(dat)
|
f.BlockStart = binary.LittleEndian.Uint64(dat[0:8])
|
||||||
f.Size = binary.LittleEndian.Uint64(dat[8:])
|
f.Size = binary.LittleEndian.Uint64(dat[8:16])
|
||||||
f.Sparse = binary.LittleEndian.Uint64(dat[16:])
|
f.Sparse = binary.LittleEndian.Uint64(dat[16:24])
|
||||||
f.LinkCount = binary.LittleEndian.Uint32(dat[24:])
|
f.LinkCount = binary.LittleEndian.Uint32(dat[24:28])
|
||||||
f.FragInd = binary.LittleEndian.Uint32(dat[28:])
|
f.FragInd = binary.LittleEndian.Uint32(dat[28:32])
|
||||||
f.FragOffset = binary.LittleEndian.Uint32(dat[32:])
|
f.FragOffset = binary.LittleEndian.Uint32(dat[32:36])
|
||||||
f.XattrInd = binary.LittleEndian.Uint32(dat[36:])
|
f.XattrInd = binary.LittleEndian.Uint32(dat[36:40])
|
||||||
toRead := int(math.Floor(float64(f.Size) / float64(blockSize)))
|
toRead := f.Size / uint64(blockSize)
|
||||||
if f.FragInd == 0xFFFFFFFF && f.Size%uint64(blockSize) > 0 {
|
if f.FragInd == 0xFFFFFFFF && f.Size%uint64(blockSize) > 0 {
|
||||||
toRead++
|
toRead++
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-1
@@ -40,10 +40,17 @@ type Inode struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Read(r io.Reader, blockSize uint32) (i Inode, err error) {
|
func Read(r io.Reader, blockSize uint32) (i Inode, err error) {
|
||||||
err = binary.Read(r, binary.LittleEndian, &i.Header)
|
dat := make([]byte, 16)
|
||||||
|
_, err = r.Read(dat)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
i.Type = binary.LittleEndian.Uint16(dat[0:2])
|
||||||
|
i.Perm = binary.LittleEndian.Uint16(dat[2:4])
|
||||||
|
i.UidInd = binary.LittleEndian.Uint16(dat[4:6])
|
||||||
|
i.GidInd = binary.LittleEndian.Uint16(dat[6:8])
|
||||||
|
i.ModTime = binary.LittleEndian.Uint32(dat[8:12])
|
||||||
|
i.Num = binary.LittleEndian.Uint32(dat[12:16])
|
||||||
switch i.Type {
|
switch i.Type {
|
||||||
case Dir:
|
case Dir:
|
||||||
i.Data, err = ReadDir(r)
|
i.Data, err = ReadDir(r)
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
squashfsURL = "https://darkstorm.tech/files/LinuxPATest.sfs"
|
squashfsURL = "https://darkstorm.tech/files/LinuxPATest.sfs"
|
||||||
squashfsName = "test.sfs"
|
squashfsName = "tensorflow.sqfs"
|
||||||
)
|
)
|
||||||
|
|
||||||
func preTest(dir string) (fil *os.File, err error) {
|
func preTest(dir string) (fil *os.File, err error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user