From 04ab08f29486b0ab35245986bd0b200b93e85d33 Mon Sep 17 00:00:00 2001 From: Wojciech Nagrodzki <278594+wnagrodzki@users.noreply.github.com> Date: Mon, 4 Nov 2019 19:21:53 +0100 Subject: [PATCH] Use new FileHandle methods that throw errors instead of exceptions --- Logger.xcodeproj/project.pbxproj | 4 +- Logger/Loggers/DiskLogger/DiskLogger.swift | 7 ++-- Logger/Loggers/DiskLogger/OSFileHandle.swift | 42 ++++++++++++++++--- .../Loggers/DiskLogger/SizeLimitedFile.swift | 12 +++--- 4 files changed, 48 insertions(+), 17 deletions(-) diff --git a/Logger.xcodeproj/project.pbxproj b/Logger.xcodeproj/project.pbxproj index 317817a..220338c 100644 --- a/Logger.xcodeproj/project.pbxproj +++ b/Logger.xcodeproj/project.pbxproj @@ -370,7 +370,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -425,7 +425,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos; diff --git a/Logger/Loggers/DiskLogger/DiskLogger.swift b/Logger/Loggers/DiskLogger/DiskLogger.swift index 9e14117..69e5320 100644 --- a/Logger/Loggers/DiskLogger/DiskLogger.swift +++ b/Logger/Loggers/DiskLogger/DiskLogger.swift @@ -46,6 +46,7 @@ protocol LogrotateFactory { } /// Logger that writes messages into the file at specified URL with log rotation support. +@available(OSX 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) public final class DiskLogger: Logger { private let fileURL: URL @@ -97,7 +98,7 @@ public final class DiskLogger: Logger { try self.writeBuffer() } catch is SizeLimitedFileQuotaReached { - self.closeSizeLimitedFile() + try self.closeSizeLimitedFile() try self.rotateLogFiles() try self.openSizeLimitedFile() try self.writeBuffer() @@ -124,8 +125,8 @@ public final class DiskLogger: Logger { buffer.removeAll() } - private func closeSizeLimitedFile() { - self.sizeLimitedFile.synchronizeAndCloseFile() + private func closeSizeLimitedFile() throws { + try self.sizeLimitedFile.synchronizeAndCloseFile() self.sizeLimitedFile = nil } diff --git a/Logger/Loggers/DiskLogger/OSFileHandle.swift b/Logger/Loggers/DiskLogger/OSFileHandle.swift index dfe5bb9..3f9103a 100644 --- a/Logger/Loggers/DiskLogger/OSFileHandle.swift +++ b/Logger/Loggers/DiskLogger/OSFileHandle.swift @@ -9,15 +9,45 @@ import Foundation protocol OSFileHandle { - func seekToEndOfFile() -> UInt64 - func swift_write(_ data: Data) throws - func synchronizeFile() - func closeFile() + func osSeekToEndOfFile() throws -> UInt64 + func osWrite(_ data: Data) throws + func osSynchronizeFile() throws + func osCloseFile() throws } extension FileHandle: OSFileHandle { - func swift_write(_ data: Data) throws { - try __write(data, error: ()) + func osSeekToEndOfFile() throws -> UInt64 { + if #available(iOS 13.0, *) { + var offsetInFile: UInt64 = 0 + try __seek(toEndReturningOffset:&offsetInFile) + return offsetInFile + } else { + fatalError() + } + } + + func osWrite(_ data: Data) throws { + if #available(iOS 13.0, *) { + try __write(data, error: ()) + } else { + fatalError() + } + } + + func osSynchronizeFile() throws { + if #available(iOS 13.0, *) { + try synchronize() + } else { + fatalError() + } + } + + func osCloseFile() throws { + if #available(iOS 13.0, *) { + try close() + } else { + fatalError() + } } } diff --git a/Logger/Loggers/DiskLogger/SizeLimitedFile.swift b/Logger/Loggers/DiskLogger/SizeLimitedFile.swift index d95e5f4..e7b89cb 100644 --- a/Logger/Loggers/DiskLogger/SizeLimitedFile.swift +++ b/Logger/Loggers/DiskLogger/SizeLimitedFile.swift @@ -42,7 +42,7 @@ protocol SizeLimitedFile { func write(_ data: Data) throws /// Writes all in-memory data to permanent storage and closes the file. - func synchronizeAndCloseFile() + func synchronizeAndCloseFile() throws } /// Allows writing to a file while respecting allowed size limit. @@ -61,7 +61,7 @@ final class SizeLimitedFileImpl { init(fileURL: URL, fileSizeLimit: UInt64, fileFactory: FileHandleFactory) throws { file = try fileFactory.makeInstance(forWritingTo: fileURL) self.sizeLimit = fileSizeLimit - currentSize = file.seekToEndOfFile() + currentSize = try file.osSeekToEndOfFile() } } @@ -72,12 +72,12 @@ extension SizeLimitedFileImpl: SizeLimitedFile { guard currentSize + dataSize <= sizeLimit else { throw SizeLimitedFileQuotaReached() } - try file.swift_write(data) + try file.osWrite(data) currentSize += dataSize } - func synchronizeAndCloseFile() { - file.synchronizeFile() - file.closeFile() + func synchronizeAndCloseFile() throws { + try file.osSynchronizeFile() + try file.osCloseFile() } }