Skip to content

Commit 7adc2d6

Browse files
committed
[SR-9979] FileHandle class used to implement FileManager._compareFiles
1 parent a733b6b commit 7adc2d6

File tree

1 file changed

+14
-22
lines changed

1 file changed

+14
-22
lines changed

Foundation/FileManager.swift

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1720,39 +1720,31 @@ open class FileManager : NSObject {
17201720
#if os(Windows)
17211721
NSUnimplemented()
17221722
#else
1723-
let fd1 = open(file1Rep, O_RDONLY)
1724-
guard fd1 >= 0 else {
1723+
guard let file1 = FileHandle(forReadingAtPath: String(cString: file1Rep)) else {
17251724
return false
17261725
}
1727-
defer { close(fd1) }
1728-
1729-
let fd2 = open(file2Rep, O_RDONLY)
1730-
guard fd2 >= 0 else {
1726+
1727+
defer { try? file1.close() }
1728+
1729+
guard let file2 = FileHandle(forReadingAtPath: String(cString: file2Rep)) else {
17311730
return false
17321731
}
1733-
defer { close(fd2) }
1734-
1735-
let buffer1 = UnsafeMutablePointer<UInt8>.allocate(capacity: bufSize)
1736-
let buffer2 = UnsafeMutablePointer<UInt8>.allocate(capacity: bufSize)
1737-
defer {
1738-
buffer1.deallocate()
1739-
buffer2.deallocate()
1740-
}
1741-
1732+
1733+
defer { try? file2.close() }
1734+
17421735
var bytesLeft = size
17431736
while bytesLeft > 0 {
17441737
let bytesToRead = Int(min(Int64(bufSize), bytesLeft))
1745-
guard read(fd1, buffer1, bytesToRead) == bytesToRead else {
1746-
return false
1747-
}
1748-
guard read(fd2, buffer2, bytesToRead) == bytesToRead else {
1749-
return false
1750-
}
1751-
guard memcmp(buffer1, buffer2, bytesToRead) == 0 else {
1738+
let file1Data = file1.readData(ofLength: bytesToRead)
1739+
let file2Data = file2.readData(ofLength: bytesToRead)
1740+
1741+
guard file1Data.count == bytesToRead, file2Data.count == bytesToRead, file1Data == file2Data else {
17521742
return false
17531743
}
1744+
17541745
bytesLeft -= Int64(bytesToRead)
17551746
}
1747+
17561748
return true
17571749
#endif
17581750
}

0 commit comments

Comments
 (0)