Possible fix for #22

Add sparse support for fragments (undocumented)
This commit is contained in:
Caleb Gardner
2023-08-12 13:30:15 -05:00
parent a129b259be
commit 54d193a3df
2 changed files with 7 additions and 3 deletions
+5 -1
View File
@@ -1,6 +1,7 @@
package squashfs
import (
"bytes"
"io"
"github.com/CalebQ42/squashfs/internal/toreader"
@@ -12,8 +13,11 @@ type fragEntry struct {
_ uint32
}
func (r Reader) fragReader(index uint32) (io.Reader, error) {
func (r Reader) fragReader(index uint32, fragSize uint32) (io.Reader, error) {
realSize := r.fragEntries[index].Size &^ (1 << 24)
if realSize == 0 {
return bytes.NewReader(make([]byte, fragSize)), nil
}
rdr := io.LimitReader(toreader.NewReader(r.r, int64(r.fragEntries[index].Start)), int64(realSize))
if realSize != r.fragEntries[index].Size {
return rdr, nil
+2 -2
View File
@@ -59,7 +59,7 @@ func (r Reader) getReaders(i inode.Inode) (full *data.FullReader, rdr *data.Read
if fragInd != 0xFFFFFFFF {
full.AddFragment(func() (io.Reader, error) {
var fragRdr io.Reader
fragRdr, err = r.fragReader(fragInd)
fragRdr, err = r.fragReader(fragInd, fragSize)
if err != nil {
return nil, err
}
@@ -75,7 +75,7 @@ func (r Reader) getReaders(i inode.Inode) (full *data.FullReader, rdr *data.Read
return fragRdr, nil
})
var fragRdr io.Reader
fragRdr, err = r.fragReader(fragInd)
fragRdr, err = r.fragReader(fragInd, fragSize)
if err != nil {
return nil, nil, err
}