ulikunitz/xz's ReaderConfig.DictCap is a minimum: a stream asking for a 1 GiB or 4 GiB dictionary was given it. github.com/therootcompany/xz, a port of xz-embedded, takes a maximum and refuses a block whose LZMA2 dictionary is larger before allocating it. 64 MiB, xz's largest preset.
53 lines
1011 B
Go
53 lines
1011 B
Go
/*
|
|
* XZ decompressor utility functions
|
|
*
|
|
* Author: Michael Cross <https://github.com/xi2>
|
|
*
|
|
* This file has been put into the public domain.
|
|
* You can do whatever you want with this file.
|
|
*/
|
|
|
|
package xz
|
|
|
|
func getLE32(buf []byte) uint32 {
|
|
return uint32(buf[0]) |
|
|
uint32(buf[1])<<8 |
|
|
uint32(buf[2])<<16 |
|
|
uint32(buf[3])<<24
|
|
}
|
|
|
|
func getBE32(buf []byte) uint32 {
|
|
return uint32(buf[0])<<24 |
|
|
uint32(buf[1])<<16 |
|
|
uint32(buf[2])<<8 |
|
|
uint32(buf[3])
|
|
}
|
|
|
|
func putLE32(val uint32, buf []byte) {
|
|
buf[0] = byte(val)
|
|
buf[1] = byte(val >> 8)
|
|
buf[2] = byte(val >> 16)
|
|
buf[3] = byte(val >> 24)
|
|
return
|
|
}
|
|
|
|
func putBE32(val uint32, buf []byte) {
|
|
buf[0] = byte(val >> 24)
|
|
buf[1] = byte(val >> 16)
|
|
buf[2] = byte(val >> 8)
|
|
buf[3] = byte(val)
|
|
return
|
|
}
|
|
|
|
func putLE64(val uint64, buf []byte) {
|
|
buf[0] = byte(val)
|
|
buf[1] = byte(val >> 8)
|
|
buf[2] = byte(val >> 16)
|
|
buf[3] = byte(val >> 24)
|
|
buf[4] = byte(val >> 32)
|
|
buf[5] = byte(val >> 40)
|
|
buf[6] = byte(val >> 48)
|
|
buf[7] = byte(val >> 56)
|
|
return
|
|
}
|