github.com/josephvusich/fdf@v0.0.0-20230522095411-9326dd32e33f/filecompare.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "io" 6 ) 7 8 func equalFiles(r1, r2 *fileRecord, o *options) bool { 9 f1, err := o.OpenFile(r1.FilePath) 10 if err != nil { 11 return false 12 } 13 defer f1.Close() 14 15 f2, err := o.OpenFile(r2.FilePath) 16 if err != nil { 17 return false 18 } 19 defer f2.Close() 20 21 return equalReaders(f1, f2) 22 } 23 24 func equalReaders(f1, f2 io.Reader) bool { 25 buf1 := make([]byte, 0xFFFFF) 26 buf2 := make([]byte, 0xFFFFF) 27 28 for { 29 n1, err1 := f1.Read(buf1) 30 n2, err2 := f2.Read(buf2) 31 32 if err1 == io.EOF && err2 == io.EOF { 33 return true 34 } 35 36 if err1 != nil || err2 != nil { 37 panic("unexpected read error") 38 } 39 40 if n1 != n2 { 41 panic("unexpected read mismatch") 42 } 43 44 if !bytes.Equal(buf1[:n1], buf2[:n2]) { 45 return false 46 } 47 } 48 }