mirror of
https://github.com/darlinghq/darling-corefoundation.git
synced 2024-10-06 16:53:28 +00:00
244 lines
5.0 KiB
Objective-C
244 lines
5.0 KiB
Objective-C
//
|
|
// NSError.m
|
|
// CoreFoundation
|
|
//
|
|
// Copyright (c) 2014 Apportable. All rights reserved.
|
|
//
|
|
|
|
#import <Foundation/NSError.h>
|
|
#import <Foundation/NSError_Private.h>
|
|
|
|
#import <Foundation/NSDictionary.h>
|
|
#import "ForFoundationOnly.h"
|
|
#import "NSObjectInternal.h"
|
|
|
|
CF_PRIVATE
|
|
@interface __NSCFError : __NSCFType
|
|
@end
|
|
|
|
|
|
NSString *const NSCocoaErrorDomain = @"NSCocoaErrorDomain";
|
|
NSString *const NSPOSIXErrorDomain = @"NSPOSIXErrorDomain";
|
|
NSString *const NSOSStatusErrorDomain = @"NSOSStatusErrorDomain";
|
|
NSString *const NSMachErrorDomain = @"NSMachErrorDomain";
|
|
NSString *const NSUnderlyingErrorKey = @"NSUnderlyingError";
|
|
NSString *const NSLocalizedDescriptionKey = @"NSLocalizedDescription";
|
|
NSString *const NSLocalizedFailureReasonErrorKey = @"NSLocalizedFailureReason";
|
|
NSString *const NSLocalizedRecoverySuggestionErrorKey = @"NSLocalizedRecoverySuggestion";
|
|
NSString *const NSLocalizedRecoveryOptionsErrorKey = @"NSLocalizedRecoveryOptions";
|
|
NSString *const NSRecoveryAttempterErrorKey = @"NSRecoveryAttempter";
|
|
NSString *const NSHelpAnchorErrorKey = @"NSHelpAnchor";
|
|
NSString *const NSStringEncodingErrorKey = @"NSStringEncoding";
|
|
NSString *const NSURLErrorKey = @"NSURL";
|
|
NSString *const NSFilePathErrorKey = @"NSFilePath";
|
|
NSString *const NSDebugDescriptionErrorKey = @"NSDebugDescription";
|
|
NSString *const NSLocalizedFailureErrorKey = @"NSLocalizedFailure";
|
|
|
|
static NSError *_outOfmemoryError = nil;
|
|
|
|
@implementation NSError
|
|
|
|
+ (void)initialize
|
|
{
|
|
static dispatch_once_t once = 0L;
|
|
dispatch_once(&once, ^{
|
|
_outOfmemoryError = [[NSError errorWithDomain:NSPOSIXErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey: @"Out of memory"}] retain];
|
|
});
|
|
}
|
|
|
|
+ (NSError *)_outOfMemoryError
|
|
{
|
|
return _outOfmemoryError;
|
|
}
|
|
|
|
- (CFTypeID)_cfTypeID
|
|
{
|
|
return CFErrorGetTypeID();
|
|
}
|
|
|
|
+ (id)errorWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict
|
|
{
|
|
return [[[self alloc] initWithDomain:domain code:code userInfo:dict] autorelease];
|
|
}
|
|
|
|
- (id)initWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict
|
|
{
|
|
self = [super init];
|
|
|
|
if (self)
|
|
{
|
|
_code = code;
|
|
_domain = [domain copy];
|
|
_userInfo = [dict copy];
|
|
}
|
|
|
|
return self;
|
|
}
|
|
|
|
- (NSString *)domain
|
|
{
|
|
return _domain;
|
|
}
|
|
|
|
- (NSInteger)code
|
|
{
|
|
return _code;
|
|
}
|
|
|
|
- (NSDictionary *)userInfo
|
|
{
|
|
return _userInfo;
|
|
}
|
|
|
|
- (NSString *)description
|
|
{
|
|
return [(NSString *)_CFErrorCreateDebugDescription((CFErrorRef)self) autorelease];
|
|
}
|
|
|
|
- (NSString *)localizedDescription
|
|
{
|
|
NSString *desc = [[self userInfo][NSLocalizedDescriptionKey] copy];
|
|
|
|
if (desc == nil)
|
|
{
|
|
desc = (NSString *)_CFErrorCreateLocalizedDescription((CFErrorRef)self);
|
|
if (desc == nil)
|
|
{
|
|
desc = (NSString *)CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("Operation could not be completed. %@ %d"), [self domain], [self code]);
|
|
}
|
|
}
|
|
|
|
return [desc autorelease];
|
|
}
|
|
|
|
- (NSString *)localizedFailureReason
|
|
{
|
|
return [self userInfo][NSLocalizedFailureReasonErrorKey];
|
|
}
|
|
|
|
- (NSString *)localizedRecoverySuggestion
|
|
{
|
|
return [self userInfo][NSLocalizedRecoverySuggestionErrorKey];
|
|
}
|
|
|
|
- (NSArray *)localizedRecoveryOptions
|
|
{
|
|
return [self userInfo][NSLocalizedRecoveryOptionsErrorKey];
|
|
}
|
|
|
|
- (id)recoveryAttempter
|
|
{
|
|
return [self userInfo][NSRecoveryAttempterErrorKey];
|
|
}
|
|
|
|
- (NSString *)helpAnchor
|
|
{
|
|
return [self userInfo][NSHelpAnchorErrorKey];
|
|
}
|
|
|
|
- (id)copyWithZone:(NSZone *)zone
|
|
{
|
|
return [[NSError allocWithZone:zone] initWithDomain:[self domain] code:[self code] userInfo:[self userInfo]];
|
|
}
|
|
|
|
+ (BOOL)supportsSecureCoding
|
|
{
|
|
return NO;
|
|
}
|
|
|
|
- (id)initWithCoder:(NSCoder *)aDecoder
|
|
{
|
|
#warning TODO: FIXME
|
|
[self release];
|
|
return nil;
|
|
}
|
|
|
|
- (void)encodeWithCoder:(NSCoder *)aCoder
|
|
{
|
|
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation NSError (NSErrorPrivateStuff)
|
|
|
|
+ (void)_setFileNameLocalizationEnabled:(BOOL)enabled
|
|
{
|
|
// silently ignore it
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation __NSCFError
|
|
|
|
+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key
|
|
{
|
|
return NO;
|
|
}
|
|
|
|
- (id)copyWithZone:(NSZone *)zone
|
|
{
|
|
return (id)CFErrorCreate(kCFAllocatorDefault, (CFStringRef)[self domain], [self code], (CFDictionaryRef)[self userInfo]);
|
|
}
|
|
|
|
- (Class)classForCoder
|
|
{
|
|
return [NSError class];
|
|
}
|
|
|
|
- (NSDictionary *)userInfo
|
|
{
|
|
return [(NSDictionary *)CFErrorCopyUserInfo((CFErrorRef)self) autorelease];
|
|
}
|
|
|
|
- (NSString *)domain
|
|
{
|
|
return (NSString *)CFErrorGetDomain((CFErrorRef)self);
|
|
}
|
|
|
|
- (NSInteger)code
|
|
{
|
|
return CFErrorGetCode((CFErrorRef)self);
|
|
}
|
|
|
|
- (NSUInteger)retainCount
|
|
{
|
|
return CFGetRetainCount((CFTypeRef)self);
|
|
}
|
|
|
|
- (BOOL)_isDeallocating
|
|
{
|
|
return _CFIsDeallocating((CFTypeRef)self);
|
|
}
|
|
|
|
- (BOOL)_tryRetain
|
|
{
|
|
return _CFTryRetain((CFTypeRef)self) != NULL;
|
|
}
|
|
|
|
- (oneway void)release
|
|
{
|
|
CFRelease((CFTypeRef)self);
|
|
}
|
|
|
|
- (id)retain
|
|
{
|
|
return (id)CFRetain((CFTypeRef)self);
|
|
}
|
|
|
|
- (NSUInteger)hash
|
|
{
|
|
return CFHash((CFTypeRef)self);
|
|
}
|
|
|
|
- (BOOL)isEqual:(id)other
|
|
{
|
|
if (other == nil)
|
|
{
|
|
return NO;
|
|
}
|
|
return CFEqual((CFTypeRef)self, (CFTypeRef)other);
|
|
}
|
|
|
|
@end
|