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 package squashfs
import ( import (
"bytes"
"io" "io"
"github.com/CalebQ42/squashfs/internal/toreader" "github.com/CalebQ42/squashfs/internal/toreader"
@@ -12,8 +13,11 @@ type fragEntry struct {
_ uint32 _ 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) 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)) rdr := io.LimitReader(toreader.NewReader(r.r, int64(r.fragEntries[index].Start)), int64(realSize))
if realSize != r.fragEntries[index].Size { if realSize != r.fragEntries[index].Size {
return rdr, nil 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 { if fragInd != 0xFFFFFFFF {
full.AddFragment(func() (io.Reader, error) { full.AddFragment(func() (io.Reader, error) {
var fragRdr io.Reader var fragRdr io.Reader
fragRdr, err = r.fragReader(fragInd) fragRdr, err = r.fragReader(fragInd, fragSize)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -75,7 +75,7 @@ func (r Reader) getReaders(i inode.Inode) (full *data.FullReader, rdr *data.Read
return fragRdr, nil return fragRdr, nil
}) })
var fragRdr io.Reader var fragRdr io.Reader
fragRdr, err = r.fragReader(fragInd) fragRdr, err = r.fragReader(fragInd, fragSize)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }