mirror of
https://github.com/mudler/luet.git
synced 2025-09-01 23:37:07 +00:00
Switch to go mod
This commit is contained in:
49
vendor/github.com/vbatts/go-mtree/cksum.go
generated
vendored
Normal file
49
vendor/github.com/vbatts/go-mtree/cksum.go
generated
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
package mtree
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"io"
|
||||
)
|
||||
|
||||
const posixPolynomial uint32 = 0x04C11DB7
|
||||
|
||||
// cksum is an implementation of the POSIX CRC algorithm
|
||||
func cksum(r io.Reader) (uint32, int, error) {
|
||||
in := bufio.NewReader(r)
|
||||
count := 0
|
||||
var sum uint32
|
||||
f := func(b byte) {
|
||||
for i := 7; i >= 0; i-- {
|
||||
msb := sum & (1 << 31)
|
||||
sum = sum << 1
|
||||
if msb != 0 {
|
||||
sum = sum ^ posixPolynomial
|
||||
}
|
||||
}
|
||||
sum ^= uint32(b)
|
||||
}
|
||||
|
||||
for done := false; !done; {
|
||||
switch b, err := in.ReadByte(); err {
|
||||
case io.EOF:
|
||||
done = true
|
||||
case nil:
|
||||
f(b)
|
||||
count++
|
||||
default:
|
||||
return ^sum, count, err
|
||||
}
|
||||
}
|
||||
for m := count; ; {
|
||||
f(byte(m) & 0xff)
|
||||
m = m >> 8
|
||||
if m == 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
f(0)
|
||||
f(0)
|
||||
f(0)
|
||||
f(0)
|
||||
return ^sum, count, nil
|
||||
}
|
Reference in New Issue
Block a user