| // This source file is part of the Swift.org open source project |
| // |
| // Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors |
| // Licensed under Apache License v2.0 with Runtime Library Exception |
| // |
| // See http://swift.org/LICENSE.txt for license information |
| // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors |
| // |
| |
| public struct NSCocoaError : RawRepresentable, ErrorProtocol, __BridgedNSError { |
| public let rawValue: Int |
| public init(rawValue: Int) { |
| self.rawValue = rawValue |
| } |
| public static var __NSErrorDomain: String { return NSCocoaErrorDomain } |
| } |
| |
| /// Enumeration that describes the error codes within the Cocoa error |
| /// domain. |
| public extension NSCocoaError { |
| |
| public static var FileNoSuchFileError: NSCocoaError { |
| return NSCocoaError(rawValue: 4) |
| } |
| |
| public static var FileLockingError: NSCocoaError { |
| return NSCocoaError(rawValue: 255) |
| } |
| |
| public static var FileReadUnknownError: NSCocoaError { |
| return NSCocoaError(rawValue: 256) |
| } |
| |
| public static var FileReadNoPermissionError: NSCocoaError { |
| return NSCocoaError(rawValue: 257) |
| } |
| |
| public static var FileReadInvalidFileNameError: NSCocoaError { |
| return NSCocoaError(rawValue: 258) |
| } |
| |
| public static var FileReadCorruptFileError: NSCocoaError { |
| return NSCocoaError(rawValue: 259) |
| } |
| |
| public static var FileReadNoSuchFileError: NSCocoaError { |
| return NSCocoaError(rawValue: 260) |
| } |
| |
| public static var FileReadInapplicableStringEncodingError: NSCocoaError { |
| return NSCocoaError(rawValue: 261) |
| } |
| public static var FileReadUnsupportedSchemeError: NSCocoaError { |
| return NSCocoaError(rawValue: 262) |
| } |
| |
| public static var FileReadTooLargeError: NSCocoaError { |
| return NSCocoaError(rawValue: 263) |
| } |
| |
| public static var FileReadUnknownStringEncodingError: NSCocoaError { |
| return NSCocoaError(rawValue: 264) |
| } |
| |
| public static var FileWriteUnknownError: NSCocoaError { |
| return NSCocoaError(rawValue: 512) |
| } |
| |
| public static var FileWriteNoPermissionError: NSCocoaError { |
| return NSCocoaError(rawValue: 513) |
| } |
| |
| public static var FileWriteInvalidFileNameError: NSCocoaError { |
| return NSCocoaError(rawValue: 514) |
| } |
| |
| public static var FileWriteFileExistsError: NSCocoaError { |
| return NSCocoaError(rawValue: 516) |
| } |
| |
| public static var FileWriteInapplicableStringEncodingError: NSCocoaError { |
| return NSCocoaError(rawValue: 517) |
| } |
| |
| public static var FileWriteUnsupportedSchemeError: NSCocoaError { |
| return NSCocoaError(rawValue: 518) |
| } |
| |
| public static var FileWriteOutOfSpaceError: NSCocoaError { |
| return NSCocoaError(rawValue: 640) |
| } |
| |
| public static var FileWriteVolumeReadOnlyError: NSCocoaError { |
| return NSCocoaError(rawValue: 642) |
| } |
| |
| public static var FileManagerUnmountUnknownError: NSCocoaError { |
| return NSCocoaError(rawValue: 768) |
| } |
| |
| public static var FileManagerUnmountBusyError: NSCocoaError { |
| return NSCocoaError(rawValue: 769) |
| } |
| |
| public static var KeyValueValidationError: NSCocoaError { |
| return NSCocoaError(rawValue: 1024) |
| } |
| |
| public static var FormattingError: NSCocoaError { |
| return NSCocoaError(rawValue: 2048) |
| } |
| |
| public static var UserCancelledError: NSCocoaError { |
| return NSCocoaError(rawValue: 3072) |
| } |
| |
| public static var FeatureUnsupportedError: NSCocoaError { |
| return NSCocoaError(rawValue: 3328) |
| } |
| |
| public static var ExecutableNotLoadableError: NSCocoaError { |
| return NSCocoaError(rawValue: 3584) |
| } |
| |
| public static var ExecutableArchitectureMismatchError: NSCocoaError { |
| return NSCocoaError(rawValue: 3585) |
| } |
| |
| public static var ExecutableRuntimeMismatchError: NSCocoaError { |
| return NSCocoaError(rawValue: 3586) |
| } |
| |
| public static var ExecutableLoadError: NSCocoaError { |
| return NSCocoaError(rawValue: 3587) |
| } |
| |
| public static var ExecutableLinkError: NSCocoaError { |
| return NSCocoaError(rawValue: 3588) |
| } |
| |
| public static var PropertyListReadCorruptError: NSCocoaError { |
| return NSCocoaError(rawValue: 3840) |
| } |
| |
| public static var PropertyListReadUnknownVersionError: NSCocoaError { |
| return NSCocoaError(rawValue: 3841) |
| } |
| |
| public static var PropertyListReadStreamError: NSCocoaError { |
| return NSCocoaError(rawValue: 3842) |
| } |
| |
| public static var PropertyListWriteStreamError: NSCocoaError { |
| return NSCocoaError(rawValue: 3851) |
| } |
| |
| public static var PropertyListWriteInvalidError: NSCocoaError { |
| return NSCocoaError(rawValue: 3852) |
| } |
| |
| public static var XPCConnectionInterrupted: NSCocoaError { |
| return NSCocoaError(rawValue: 4097) |
| } |
| |
| public static var XPCConnectionInvalid: NSCocoaError { |
| return NSCocoaError(rawValue: 4099) |
| } |
| |
| public static var XPCConnectionReplyInvalid: NSCocoaError { |
| return NSCocoaError(rawValue: 4101) |
| } |
| |
| public static var UbiquitousFileUnavailableError: NSCocoaError { |
| return NSCocoaError(rawValue: 4353) |
| } |
| |
| public static var UbiquitousFileNotUploadedDueToQuotaError: NSCocoaError { |
| return NSCocoaError(rawValue: 4354) |
| } |
| |
| public static var UbiquitousFileUbiquityServerNotAvailable: NSCocoaError { |
| return NSCocoaError(rawValue: 4355) |
| } |
| |
| public static var UserActivityHandoffFailedError: NSCocoaError { |
| return NSCocoaError(rawValue: 4608) |
| } |
| |
| public static var UserActivityConnectionUnavailableError: NSCocoaError { |
| return NSCocoaError(rawValue: 4609) |
| } |
| |
| public static var UserActivityRemoteApplicationTimedOutError: NSCocoaError { |
| return NSCocoaError(rawValue: 4610) |
| } |
| |
| public static var UserActivityHandoffUserInfoTooLargeError: NSCocoaError { |
| return NSCocoaError(rawValue: 4611) |
| } |
| |
| public static var CoderReadCorruptError: NSCocoaError { |
| return NSCocoaError(rawValue: 4864) |
| } |
| |
| public static var CoderValueNotFoundError: NSCocoaError { |
| return NSCocoaError(rawValue: 4865) |
| } |
| |
| public var isCoderError: Bool { |
| return rawValue >= 4864 && rawValue <= 4991; |
| } |
| |
| public var isExecutableError: Bool { |
| return rawValue >= 3584 && rawValue <= 3839; |
| } |
| |
| public var isFileError: Bool { |
| return rawValue >= 0 && rawValue <= 1023; |
| } |
| |
| public var isFormattingError: Bool { |
| return rawValue >= 2048 && rawValue <= 2559; |
| } |
| |
| public var isPropertyListError: Bool { |
| return rawValue >= 3840 && rawValue <= 4095; |
| } |
| |
| public var isUbiquitousFileError: Bool { |
| return rawValue >= 4352 && rawValue <= 4607; |
| } |
| |
| public var isUserActivityError: Bool { |
| return rawValue >= 4608 && rawValue <= 4863; |
| } |
| |
| public var isValidationError: Bool { |
| return rawValue >= 1024 && rawValue <= 2047; |
| } |
| |
| public var isXPCConnectionError: Bool { |
| return rawValue >= 4096 && rawValue <= 4224; |
| } |
| } |
| |
| #if os(OSX) || os(iOS) |
| import Darwin |
| #elseif os(Linux) |
| import Glibc |
| #endif |
| |
| internal func _NSErrorWithErrno(posixErrno : Int32, reading : Bool, path : String? = nil, url : NSURL? = nil, extraUserInfo : [String : Any]? = nil) -> NSError { |
| var cocoaError : NSCocoaError |
| if reading { |
| switch posixErrno { |
| case EFBIG: cocoaError = NSCocoaError.FileReadTooLargeError |
| case ENOENT: cocoaError = NSCocoaError.FileReadNoSuchFileError |
| case EPERM, EACCES: cocoaError = NSCocoaError.FileReadNoPermissionError |
| case ENAMETOOLONG: cocoaError = NSCocoaError.FileReadUnknownError |
| default: cocoaError = NSCocoaError.FileReadUnknownError |
| } |
| } else { |
| switch posixErrno { |
| case ENOENT: cocoaError = NSCocoaError.FileNoSuchFileError |
| case EPERM, EACCES: cocoaError = NSCocoaError.FileWriteNoPermissionError |
| case ENAMETOOLONG: cocoaError = NSCocoaError.FileWriteInvalidFileNameError |
| case EDQUOT, ENOSPC: cocoaError = NSCocoaError.FileWriteOutOfSpaceError |
| case EROFS: cocoaError = NSCocoaError.FileWriteVolumeReadOnlyError |
| case EEXIST: cocoaError = NSCocoaError.FileWriteFileExistsError |
| default: cocoaError = NSCocoaError.FileWriteUnknownError |
| } |
| } |
| |
| var userInfo = extraUserInfo ?? [String : Any]() |
| if let path = path { |
| userInfo[NSFilePathErrorKey] = path._nsObject |
| } else if let url = url { |
| userInfo[NSURLErrorKey] = url |
| } |
| return NSError(domain: NSCocoaErrorDomain, code: cocoaError.rawValue, userInfo: userInfo) |
| |
| } |