Change no_lzma and no_lzo to no_obsolete and no_gpl

Added build tags section to README
This commit is contained in:
Caleb Gardner
2025-03-17 06:16:25 -05:00
parent 638355ab71
commit ad24995b7b
10 changed files with 143 additions and 39 deletions
+4
View File
@@ -11,6 +11,10 @@ Currently has support for reading squashfs files and extracting files and folder
Special thanks to <https://dr-emann.github.io/squashfs/> for some VERY important information in an easy to understand format. Special thanks to <https://dr-emann.github.io/squashfs/> for some VERY important information in an easy to understand format.
Thanks also to [distri's squashfs library](https://github.com/distr1/distri/tree/master/internal/squashfs) as I referenced it to figure some things out (and double check others). Thanks also to [distri's squashfs library](https://github.com/distr1/distri/tree/master/internal/squashfs) as I referenced it to figure some things out (and double check others).
## Build tags
This library has two optional build tags. `no_gpl` disables the ability to read archives with lzo compression due to the library's gpl license. `no_obsolete` removes "obsolete" compression types for a reduced size; currently this only disable lzma compression.
## FUSE ## FUSE
As of `v1.0`, FUSE capabilities has been moved to [a separate library](https://github.com/CalebQ42/squashfuse). As of `v1.0`, FUSE capabilities has been moved to [a separate library](https://github.com/CalebQ42/squashfuse).
+32
View File
@@ -0,0 +1,32 @@
package decompress
import "errors"
// The types of compression supported by squashfs
const (
ZlibCompression = uint16(iota + 1)
LZMACompression
LZOCompression
XZCompression
LZ4Compression
ZSTDCompression
)
func GetDecompressor(compType uint16) (Decompressor, error) {
switch compType {
case ZlibCompression:
return Zlib{}, nil
case LZMACompression:
return Lzma{}, nil
case LZOCompression:
return Lzo{}, nil
case XZCompression:
return Xz{}, nil
case LZ4Compression:
return Lz4{}, nil
case ZSTDCompression:
return &Zstd{}, nil
default:
return nil, errors.New("invalid compression type. possible corrupted archive")
}
}
+34
View File
@@ -0,0 +1,34 @@
//go:build no_gpl
package decompress
import "errors"
// The types of compression supported by squashfs
const (
ZlibCompression = uint16(iota + 1)
LZMACompression
LZOCompression
XZCompression
LZ4Compression
ZSTDCompression
)
func GetDecompressor(compType uint16) (Decompressor, error) {
switch compType {
case ZlibCompression:
return Zlib{}, nil
case LZMACompression:
return Lzma{}, nil
case LZOCompression:
return nil, errors.New("lzo compression is disable in this build with no_gpl")
case XZCompression:
return Xz{}, nil
case LZ4Compression:
return Lz4{}, nil
case ZSTDCompression:
return &Zstd{}, nil
default:
return nil, errors.New("invalid compression type. possible corrupted archive")
}
}
@@ -0,0 +1,34 @@
//go:build no_obsolete
package decompress
import "errors"
// The types of compression supported by squashfs
const (
ZlibCompression = uint16(iota + 1)
LZMACompression
LZOCompression
XZCompression
LZ4Compression
ZSTDCompression
)
func GetDecompressor(compType uint16) (Decompressor, error) {
switch compType {
case ZlibCompression:
return Zlib{}, nil
case LZMACompression:
return nil, errors.New("lzma compression is disable in this build with no_obsolete")
case LZOCompression:
return Lzo{}, nil
case XZCompression:
return Xz{}, nil
case LZ4Compression:
return Lz4{}, nil
case ZSTDCompression:
return &Zstd{}, nil
default:
return nil, errors.New("invalid compression type. possible corrupted archive")
}
}
@@ -0,0 +1,34 @@
//go:build no_gpl && no_obsolete
package decompress
import "errors"
// The types of compression supported by squashfs
const (
ZlibCompression = uint16(iota + 1)
LZMACompression
LZOCompression
XZCompression
LZ4Compression
ZSTDCompression
)
func GetDecompressor(compType uint16) (Decompressor, error) {
switch compType {
case ZlibCompression:
return Zlib{}, nil
case LZMACompression:
return nil, errors.New("lzma compression is disable in this build with no_obsolete")
case LZOCompression:
return nil, errors.New("lzo compression is disable in this build with no_gpl")
case XZCompression:
return Xz{}, nil
case LZ4Compression:
return Lz4{}, nil
case ZSTDCompression:
return &Zstd{}, nil
default:
return nil, errors.New("invalid compression type. possible corrupted archive")
}
}
+1
View File
@@ -1,4 +1,5 @@
//go:build !no_lzma //go:build !no_lzma
package decompress package decompress
import ( import (
-12
View File
@@ -1,12 +0,0 @@
//go:build no_lzma
package decompress
import (
"fmt"
)
type Lzma struct{}
func (l Lzma) Decompress(_ []byte) ([]byte, error) {
return nil, fmt.Errorf("lzma is not supported")
}
+1
View File
@@ -1,4 +1,5 @@
//go:build !no_lzo //go:build !no_lzo
package decompress package decompress
import ( import (
-12
View File
@@ -1,12 +0,0 @@
//go:build no_lzo
package decompress
import (
"fmt"
)
type Lzo struct{}
func (l Lzo) Decompress(_ []byte) ([]byte, error) {
return nil, fmt.Errorf("lzo is not supported")
}
+3 -15
View File
@@ -55,21 +55,9 @@ func NewReader(r io.ReaderAt) (rdr *Reader, err error) {
if !rdr.Superblock.ValidVersion() { if !rdr.Superblock.ValidVersion() {
return nil, ErrorVersion return nil, ErrorVersion
} }
switch rdr.Superblock.CompType { rdr.d, err = decompress.GetDecompressor(rdr.Superblock.CompType)
case ZlibCompression: if err != nil {
rdr.d = decompress.Zlib{} return nil, err
case LZMACompression:
rdr.d = decompress.Lzma{}
case LZOCompression:
rdr.d = decompress.Lzo{}
case XZCompression:
rdr.d = decompress.Xz{}
case LZ4Compression:
rdr.d = decompress.Lz4{}
case ZSTDCompression:
rdr.d = &decompress.Zstd{}
default:
return nil, errors.New("invalid compression type. possible corrupted archive")
} }
rdr.Root, err = rdr.directoryFromRef(rdr.Superblock.RootInodeRef, "") rdr.Root, err = rdr.directoryFromRef(rdr.Superblock.RootInodeRef, "")
if err != nil { if err != nil {