more work on decompression

This commit is contained in:
Caleb Gardner
2020-11-10 22:31:21 -06:00
parent ac2b6da841
commit 89b19b06f6
3 changed files with 93 additions and 12 deletions
+14 -5
View File
@@ -13,7 +13,7 @@ var (
//Squashfs is a squashfs backed by a ReadSeeker.
type Squashfs struct {
rdr *io.SectionReader //underlying reader
rdr *Reader //underlying reader
offset int
super Superblock
flags SuperblockFlags
@@ -21,9 +21,10 @@ type Squashfs struct {
}
//NewSquashfs creates a new Squashfs backed by the given reader
func NewSquashfs(reader *io.SectionReader) (*Squashfs, error) {
func NewSquashfs(reader io.ReaderAt) (*Squashfs, error) {
rdr := NewReader(reader)
var superblock Superblock
err := binary.Read(reader, binary.LittleEndian, &superblock)
err := binary.Read(&rdr, binary.LittleEndian, &superblock)
if err != nil {
return nil, err
}
@@ -36,12 +37,20 @@ func NewSquashfs(reader *io.SectionReader) (*Squashfs, error) {
switch superblock.Compression {
case zlibCompression:
var gzipOpRaw gzipOptionsRaw
err = binary.Read(reader, binary.LittleEndian, &gzipOpRaw)
err = binary.Read(&rdr, binary.LittleEndian, &gzipOpRaw)
if err != nil {
return nil, err
}
compressionOptions = NewGzipOptions(gzipOpRaw)
break
case xzCompression:
var xzOpRaw xzOptionsRaw
err = binary.Read(&rdr, binary.LittleEndian, xzOpRaw)
if err != nil {
return nil, err
}
compressionOptions = NewXzOption(xzOpRaw)
break
default:
//TODO: all the compression options
return nil, errors.New("This type of compression isn't supported yet")
@@ -49,7 +58,7 @@ func NewSquashfs(reader *io.SectionReader) (*Squashfs, error) {
}
//TODO: parse more info
return &Squashfs{
rdr: reader,
rdr: &rdr,
super: superblock,
flags: flags,
compressionOptions: compressionOptions,