From 04a1e03e7aa55bdb9e5767f05b7c0942dcb01ba3 Mon Sep 17 00:00:00 2001 From: Kare Morstol Date: Mon, 14 Sep 2015 19:48:07 +0200 Subject: [PATCH] Improve error handling and messages when writing and reading to/from filehandles. And use NSStringEncoding as type for encoding. --- SwiftShell/Context.swift | 2 +- SwiftShell/FileHandle.swift | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/SwiftShell/Context.swift b/SwiftShell/Context.swift index 09f52f0..2755b7a 100644 --- a/SwiftShell/Context.swift +++ b/SwiftShell/Context.swift @@ -8,7 +8,7 @@ import Foundation public protocol ShellContextType { - var encoding: UInt {get set} + var encoding: NSStringEncoding {get set} var env: [String: String] {get set} var stdin: NSFileHandle {get set} diff --git a/SwiftShell/FileHandle.swift b/SwiftShell/FileHandle.swift index 301c00e..77fa354 100644 --- a/SwiftShell/FileHandle.swift +++ b/SwiftShell/FileHandle.swift @@ -9,22 +9,22 @@ import Foundation extension NSFileHandle { - public func readSome (encoding encoding: UInt = main.encoding) -> String? { + public func readSome (encoding encoding: NSStringEncoding = main.encoding) -> String? { let data: NSData = self.availableData guard data.length > 0 else { return nil } guard let result = NSString(data: data, encoding: encoding) else { - exit(errormessage: "Fatal error - could not convert stream to text.") + exit(errormessage: "Could not convert binary data to text.") } return result as String } - public func read (encoding encoding: UInt = main.encoding) -> String { + public func read (encoding encoding: NSStringEncoding = main.encoding) -> String { let data: NSData = self.readDataToEndOfFile() guard let result = NSString(data: data, encoding: encoding) else { - exit(errormessage: "Fatal error - could not convert stream to text.") + exit(errormessage: "Could not convert binary data to text.") } return result as String @@ -33,8 +33,11 @@ extension NSFileHandle { extension NSFileHandle { - public func write (x: T, encoding: UInt = main.encoding) { - writeData(String(x).dataUsingEncoding(encoding, allowLossyConversion:false)!) + public func write (x: T, encoding: NSStringEncoding = main.encoding) { + guard let data = String(x).dataUsingEncoding(encoding, allowLossyConversion:false) else { + exit(errormessage: "Could not convert text to binary data.") + } + self.writeData(data) } public func writeln (x: T, encoding: UInt = main.encoding) {