-func checkFile(
- pkgName, fn, fnHash, hasherName string,
- hasher hash.Hash, digest []byte,
-) bool {
- expected, err := os.ReadFile(fnHash)
- if err != nil {
- log.Fatal(err)
- }
- fd, err := os.Open(fn)
- if err != nil {
- if os.IsNotExist(err) {
- return true
+func checker(jobs chan string, isGood *bool, workers *sync.WaitGroup) {
+ hasherBLAKE2b256 := blake2b256New()
+ hasherSHA256 := sha256.New()
+ digestBuf := make([]byte, 32)
+ defer workers.Done()
+ var fd *os.File
+ var br bufio.Reader
+ var err error
+ var digest []byte
+ for fn := range jobs {
+ fd, err = os.Open(fn)
+ if err != nil {
+ fmt.Println("ERR", fn, err)
+ *isGood = false
+ continue
+ }
+
+ digest, err = os.ReadFile(fn + "." + HashAlgoBLAKE2b256)
+ if err != nil {
+ if !errors.Is(err, fs.ErrNotExist) {
+ fmt.Println("ERR", fn+"."+HashAlgoBLAKE2b256, err)
+ *isGood = false
+ }
+ goto NoBLAKE2b256
+ }
+ hasherBLAKE2b256.Reset()
+ br.Reset(fd)
+ _, err = io.Copy(hasherBLAKE2b256, &br)
+ fd.Seek(0, io.SeekStart)
+ if err != nil {
+ fmt.Println("ERR", fn+"."+HashAlgoBLAKE2b256, err)
+ *isGood = false
+ goto NoBLAKE2b256
+ }
+ if bytes.Equal(hasherBLAKE2b256.Sum(digestBuf[:0]), digest) {
+ fmt.Println("GOOD", fn+"."+HashAlgoBLAKE2b256)
+ } else {
+ fmt.Println("BAD", fn+"."+HashAlgoBLAKE2b256)
+ *isGood = false
+ }
+
+ NoBLAKE2b256:
+ digest, err = os.ReadFile(fn + "." + HashAlgoSHA256)
+ if err != nil {
+ if !errors.Is(err, fs.ErrNotExist) {
+ fmt.Println("ERR", fn+"."+HashAlgoSHA256, err)
+ *isGood = false
+ }
+ fd.Close()
+ continue
+ }
+ hasherSHA256.Reset()
+ br.Reset(fd)
+ _, err = io.Copy(hasherSHA256, &br)
+ fd.Close()
+ if err != nil {
+ fmt.Println("ERR", fn+"."+HashAlgoBLAKE2b256, err)
+ *isGood = false
+ continue
+ }
+ if bytes.Equal(hasherSHA256.Sum(digestBuf[:0]), digest) {
+ fmt.Println("GOOD", fn+"."+HashAlgoSHA256)
+ } else {
+ fmt.Println("BAD", fn+"."+HashAlgoSHA256)
+ *isGood = false