81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
package squashfslow
|
|
|
|
import "math"
|
|
|
|
type superblock struct {
|
|
Magic uint32
|
|
InodeCount uint32
|
|
ModTime uint32
|
|
BlockSize uint32
|
|
FragCount uint32
|
|
CompType uint16
|
|
BlockLog uint16
|
|
Flags uint16
|
|
IdCount uint16
|
|
VerMaj uint16
|
|
VerMin uint16
|
|
RootInodeRef InodeRef
|
|
Size uint64
|
|
IdTableStart uint64
|
|
XattrTableStart uint64
|
|
InodeTableStart uint64
|
|
DirTableStart uint64
|
|
FragTableStart uint64
|
|
ExportTableStart uint64
|
|
}
|
|
|
|
func (s superblock) ValidMagic() bool {
|
|
return s.Magic == 0x73717368
|
|
}
|
|
|
|
func (s superblock) ValidBlockLog() bool {
|
|
return s.BlockLog == uint16(math.Log2(float64(s.BlockSize)))
|
|
}
|
|
|
|
func (s superblock) ValidVersion() bool {
|
|
return s.VerMaj == 4 && s.VerMin == 0
|
|
}
|
|
|
|
func (s superblock) UncompressedInodes() bool {
|
|
return s.Flags&0x1 == 0x1
|
|
}
|
|
|
|
func (s superblock) UncompressedData() bool {
|
|
return s.Flags&0x2 == 0x2
|
|
}
|
|
func (s superblock) UncompressedFragments() bool {
|
|
return s.Flags&0x8 == 0x8
|
|
}
|
|
|
|
func (s superblock) NoFragments() bool {
|
|
return s.Flags&0x10 == 0x10
|
|
}
|
|
|
|
func (s superblock) AlwaysFragment() bool {
|
|
return s.Flags&0x20 == 0x20
|
|
}
|
|
|
|
func (s superblock) Duplicates() bool {
|
|
return s.Flags&0x40 == 0x40
|
|
}
|
|
|
|
func (s superblock) Exportable() bool {
|
|
return s.Flags&0x80 == 0x80
|
|
}
|
|
|
|
func (s superblock) UncompressedXattrs() bool {
|
|
return s.Flags&0x100 == 0x100
|
|
}
|
|
|
|
func (s superblock) NoXattrs() bool {
|
|
return s.Flags&0x200 == 0x200
|
|
}
|
|
|
|
func (s superblock) CompressionOptions() bool {
|
|
return s.Flags&0x400 == 0x400
|
|
}
|
|
|
|
func (s superblock) UncompressedIDs() bool {
|
|
return s.Flags&0x800 == 0x800
|
|
}
|