Skip to content

Commit b03e66f

Browse files
committed
Use defer to ensure fd is closed as per NSData.writeToFile
1 parent bff194e commit b03e66f

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

Foundation/NSData.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,10 @@ extension NSData {
215215
if fd < 0 {
216216
throw NSError(domain: NSPOSIXErrorDomain, code: Int(errno), userInfo: nil)
217217
}
218-
218+
defer {
219+
close(fd)
220+
}
221+
219222
var info = stat()
220223
let ret = withUnsafeMutablePointer(&info) { infoPointer -> Bool in
221224
if fstat(fd, infoPointer) < 0 {
@@ -225,7 +228,6 @@ extension NSData {
225228
}
226229

227230
if !ret {
228-
close(fd)
229231
throw NSError(domain: NSPOSIXErrorDomain, code: Int(errno), userInfo: nil)
230232
}
231233

@@ -236,7 +238,6 @@ extension NSData {
236238

237239
// Swift does not currently expose MAP_FAILURE
238240
if data != UnsafeMutablePointer<Void>(bitPattern: -1) {
239-
close(fd)
240241
return NSDataReadResult(bytes: data, length: length) { buffer, length in
241242
munmap(data, length)
242243
}
@@ -256,7 +257,6 @@ extension NSData {
256257
total += amt
257258
}
258259

259-
close(fd)
260260
if remaining != 0 {
261261
throw NSError(domain: NSPOSIXErrorDomain, code: Int(errno), userInfo: nil)
262262
}

0 commit comments

Comments
 (0)