Change no_lzma and no_lzo to no_obsolete and no_gpl
Added build tags section to README
This commit is contained in:
@@ -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).
|
||||||
|
|||||||
@@ -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")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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,4 +1,5 @@
|
|||||||
//go:build !no_lzma
|
//go:build !no_lzma
|
||||||
|
|
||||||
package decompress
|
package decompress
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
@@ -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,4 +1,5 @@
|
|||||||
//go:build !no_lzo
|
//go:build !no_lzo
|
||||||
|
|
||||||
package decompress
|
package decompress
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
@@ -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
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user