Initial work

Create Reader
Pulled back in Inode decoding and superblock
New Data and Metadata readers
Added getting of id, fragment, and export table data lazily
Added README to squashfs/squashfs
This commit is contained in:
Caleb Gardner
2023-12-23 02:48:54 -06:00
parent d4d1b2c2b2
commit 707391baba
23 changed files with 860 additions and 2 deletions
+5
View File
@@ -0,0 +1,5 @@
package decompress
type Decompressor interface {
Decompress([]byte) ([]byte, error)
}
+15
View File
@@ -0,0 +1,15 @@
package decompress
import (
"bytes"
"io"
"github.com/pierrec/lz4/v4"
)
type Lz4 struct{}
func (l Lz4) Decompress(data []byte) ([]byte, error) {
rdr := lz4.NewReader(bytes.NewReader(data))
return io.ReadAll(rdr)
}
+18
View File
@@ -0,0 +1,18 @@
package decompress
import (
"bytes"
"io"
"github.com/ulikunitz/xz/lzma"
)
type Lzma struct{}
func (l Lzma) Decompress(data []byte) ([]byte, error) {
rdr, err := lzma.NewReader(bytes.NewReader(data))
if err != nil {
return nil, err
}
return io.ReadAll(rdr)
}
+13
View File
@@ -0,0 +1,13 @@
package decompress
import (
"bytes"
"github.com/rasky/go-lzo"
)
type Lzo struct{}
func (l Lzo) Decompress(data []byte) ([]byte, error) {
return lzo.Decompress1X(bytes.NewReader(data), len(data), 0)
}
+18
View File
@@ -0,0 +1,18 @@
package decompress
import (
"bytes"
"io"
"github.com/therootcompany/xz"
)
type Xz struct{}
func (x Xz) Decompress(data []byte) ([]byte, error) {
rdr, err := xz.NewReader(bytes.NewReader(data), 0)
if err != nil {
return nil, err
}
return io.ReadAll(rdr)
}
+18
View File
@@ -0,0 +1,18 @@
package decompress
import (
"bytes"
"compress/zlib"
"io"
)
type Zlib struct{}
func (z Zlib) Decompress(data []byte) ([]byte, error) {
rdr, err := zlib.NewReader(bytes.NewReader(data))
if err != nil {
return nil, err
}
defer rdr.Close()
return io.ReadAll(rdr)
}
+19
View File
@@ -0,0 +1,19 @@
package decompress
import (
"bytes"
"io"
"github.com/klauspost/compress/zstd"
)
type Zstd struct{}
func (z Zstd) Decompress(data []byte) ([]byte, error) {
rdr, err := zstd.NewReader(bytes.NewReader(data))
if err != nil {
return nil, err
}
defer rdr.Close()
return io.ReadAll(rdr)
}