@@ -16,18 +16,28 @@ #include "config.h" #import "OFOpenItemFailedException.h" #import "OFString.h" +#import "OFURL.h" @implementation OFOpenItemFailedException -@synthesize path = _path, mode = _mode, errNo = _errNo; +@synthesize URL = _URL, path = _path, mode = _mode, errNo = _errNo; + (instancetype)exception { OF_UNRECOGNIZED_SELECTOR } + ++ (instancetype)exceptionWithURL: (OFURL *)URL + mode: (OFString *)mode + errNo: (int)errNo +{ + return [[[self alloc] initWithURL: URL + mode: mode + errNo: errNo] autorelease]; +} + (instancetype)exceptionWithPath: (OFString *)path mode: (OFString *)mode errNo: (int)errNo { @@ -38,20 +48,38 @@ - (instancetype)init { OF_INVALID_INIT_METHOD } + +- (instancetype)initWithURL: (OFURL *)URL + mode: (OFString *)mode + errNo: (int)errNo +{ + self = [super init]; + + @try { + _URL = [URL copy]; + _mode = [mode copy]; + _errNo = errNo; + } @catch (id e) { + [self release]; + @throw e; + } + + return self; +} - (instancetype)initWithPath: (OFString *)path mode: (OFString *)mode errNo: (int)errNo { self = [super init]; @try { - _path = [path copy]; - _mode = [mode copy]; + _path = [path copy]; + _mode = [mode copy]; _errNo = errNo; } @catch (id e) { [self release]; @throw e; } @@ -59,22 +87,30 @@ return self; } - (void)dealloc { + [_URL release]; [_path release]; [_mode release]; [super dealloc]; } - (OFString *)description { + id item = nil; + + if (_URL != nil) + item = _URL; + else if (_path != nil) + item = _path; + if (_mode != nil) return [OFString stringWithFormat: @"Failed to open item %@ with mode %@: %@", - _path, _mode, of_strerror(_errNo)]; + item, _mode, of_strerror(_errNo)]; else return [OFString stringWithFormat: - @"Failed to open item %@: %@", _path, of_strerror(_errNo)]; + @"Failed to open item %@: %@", item, of_strerror(_errNo)]; } @end