@@ -37,12 +37,12 @@ #import "OFLocale.h" #import "OFNumber.h" #import "OFStream.h" #import "OFString.h" #import "OFSystemInfo.h" -#import "OFURL.h" -#import "OFURLHandler.h" +#import "OFURI.h" +#import "OFURIHandler.h" #import "OFChangeCurrentDirectoryFailedException.h" #import "OFCopyItemFailedException.h" #import "OFCreateDirectoryFailedException.h" #import "OFGetCurrentDirectoryFailedException.h" @@ -187,158 +187,157 @@ return [OFString stringWithCString: buffer encoding: [OFLocale encoding]]; # endif } -- (OFURL *)currentDirectoryURL +- (OFURI *)currentDirectoryURI { void *pool = objc_autoreleasePoolPush(); - OFURL *ret; + OFURI *ret; - ret = [OFURL fileURLWithPath: self.currentDirectoryPath]; + ret = [OFURI fileURIWithPath: self.currentDirectoryPath]; [ret retain]; objc_autoreleasePoolPop(pool); return [ret autorelease]; } #endif -- (OFFileAttributes)attributesOfItemAtURL: (OFURL *)URL +- (OFFileAttributes)attributesOfItemAtURI: (OFURI *)URI { - OFURLHandler *URLHandler; + OFURIHandler *URIHandler; - if (URL == nil) + if (URI == nil) @throw [OFInvalidArgumentException exception]; - if ((URLHandler = [OFURLHandler handlerForURL: URL]) == nil) - @throw [OFUnsupportedProtocolException exceptionWithURL: URL]; + if ((URIHandler = [OFURIHandler handlerForURI: URI]) == nil) + @throw [OFUnsupportedProtocolException exceptionWithURI: URI]; - return [URLHandler attributesOfItemAtURL: URL]; + return [URIHandler attributesOfItemAtURI: URI]; } #ifdef OF_HAVE_FILES - (OFFileAttributes)attributesOfItemAtPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); OFFileAttributes ret; - ret = [self attributesOfItemAtURL: [OFURL fileURLWithPath: path]]; + ret = [self attributesOfItemAtURI: [OFURI fileURIWithPath: path]]; [ret retain]; objc_autoreleasePoolPop(pool); return [ret autorelease]; } #endif -- (void)setAttributes: (OFFileAttributes)attributes ofItemAtURL: (OFURL *)URL +- (void)setAttributes: (OFFileAttributes)attributes ofItemAtURI: (OFURI *)URI { - OFURLHandler *URLHandler; + OFURIHandler *URIHandler; - if (URL == nil) + if (URI == nil) @throw [OFInvalidArgumentException exception]; - if ((URLHandler = [OFURLHandler handlerForURL: URL]) == nil) - @throw [OFUnsupportedProtocolException exceptionWithURL: URL]; + if ((URIHandler = [OFURIHandler handlerForURI: URI]) == nil) + @throw [OFUnsupportedProtocolException exceptionWithURI: URI]; - [URLHandler setAttributes: attributes ofItemAtURL: URL]; + [URIHandler setAttributes: attributes ofItemAtURI: URI]; } #ifdef OF_HAVE_FILES - (void)setAttributes: (OFFileAttributes)attributes ofItemAtPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); [self setAttributes: attributes - ofItemAtURL: [OFURL fileURLWithPath: path]]; + ofItemAtURI: [OFURI fileURIWithPath: path]]; objc_autoreleasePoolPop(pool); } #endif -- (bool)fileExistsAtURL: (OFURL *)URL +- (bool)fileExistsAtURI: (OFURI *)URI { - OFURLHandler *URLHandler; + OFURIHandler *URIHandler; - if (URL == nil) + if (URI == nil) @throw [OFInvalidArgumentException exception]; - if ((URLHandler = [OFURLHandler handlerForURL: URL]) == nil) - @throw [OFUnsupportedProtocolException exceptionWithURL: URL]; + if ((URIHandler = [OFURIHandler handlerForURI: URI]) == nil) + @throw [OFUnsupportedProtocolException exceptionWithURI: URI]; - return [URLHandler fileExistsAtURL: URL]; + return [URIHandler fileExistsAtURI: URI]; } #ifdef OF_HAVE_FILES - (bool)fileExistsAtPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); bool ret; - ret = [self fileExistsAtURL: [OFURL fileURLWithPath: path]]; + ret = [self fileExistsAtURI: [OFURI fileURIWithPath: path]]; objc_autoreleasePoolPop(pool); return ret; } #endif -- (bool)directoryExistsAtURL: (OFURL *)URL +- (bool)directoryExistsAtURI: (OFURI *)URI { - OFURLHandler *URLHandler; + OFURIHandler *URIHandler; - if (URL == nil) + if (URI == nil) @throw [OFInvalidArgumentException exception]; - if ((URLHandler = [OFURLHandler handlerForURL: URL]) == nil) - @throw [OFUnsupportedProtocolException exceptionWithURL: URL]; + if ((URIHandler = [OFURIHandler handlerForURI: URI]) == nil) + @throw [OFUnsupportedProtocolException exceptionWithURI: URI]; - return [URLHandler directoryExistsAtURL: URL]; + return [URIHandler directoryExistsAtURI: URI]; } #ifdef OF_HAVE_FILES - (bool)directoryExistsAtPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); bool ret; - ret = [self directoryExistsAtURL: [OFURL fileURLWithPath: path]]; + ret = [self directoryExistsAtURI: [OFURI fileURIWithPath: path]]; objc_autoreleasePoolPop(pool); return ret; } #endif -- (void)createDirectoryAtURL: (OFURL *)URL +- (void)createDirectoryAtURI: (OFURI *)URI { - OFURLHandler *URLHandler; + OFURIHandler *URIHandler; - if (URL == nil) + if (URI == nil) @throw [OFInvalidArgumentException exception]; - if ((URLHandler = [OFURLHandler handlerForURL: URL]) == nil) - @throw [OFUnsupportedProtocolException exceptionWithURL: URL]; + if ((URIHandler = [OFURIHandler handlerForURI: URI]) == nil) + @throw [OFUnsupportedProtocolException exceptionWithURI: URI]; - [URLHandler createDirectoryAtURL: URL]; + [URIHandler createDirectoryAtURI: URI]; } -- (void)createDirectoryAtURL: (OFURL *)URL - createParents: (bool)createParents +- (void)createDirectoryAtURI: (OFURI *)URI createParents: (bool)createParents { void *pool = objc_autoreleasePoolPush(); - OFMutableURL *mutableURL; + OFMutableURI *mutableURI; OFArray OF_GENERIC(OFString *) *components; - OFMutableArray OF_GENERIC(OFURL *) *componentURLs; - size_t componentURLsCount; + OFMutableArray OF_GENERIC(OFURI *) *componentURIs; + size_t componentURIsCount; ssize_t i; - if (URL == nil) + if (URI == nil) @throw [OFInvalidArgumentException exception]; if (!createParents) { - [self createDirectoryAtURL: URL]; + [self createDirectoryAtURI: URI]; return; } /* * Try blindly creating the directory first. @@ -345,15 +344,15 @@ * * The reason for this is that we might be sandboxed, so attempting to * create any of the parent directories will fail, while creating the * directory itself will work. */ - if ([self directoryExistsAtURL: URL]) + if ([self directoryExistsAtURI: URI]) return; @try { - [self createDirectoryAtURL: URL]; + [self createDirectoryAtURI: URI]; return; } @catch (OFCreateDirectoryFailedException *e) { /* * If we didn't fail because any of the parents is missing, * there is no point in trying to create the parents. @@ -361,98 +360,98 @@ if (e.errNo != ENOENT) @throw e; } /* - * Because we might be sandboxed (and for remote URLs don't even know - * anything at all), we generate the URL for every component. We then + * Because we might be sandboxed (and for remote URIs don't even know + * anything at all), we generate the URI for every component. We then * iterate them in reverse order until we find the first existing * directory, and then create subdirectories from there. */ - mutableURL = [[URL mutableCopy] autorelease]; - mutableURL.URLEncodedPath = @"/"; - components = URL.pathComponents; - componentURLs = [OFMutableArray arrayWithCapacity: components.count]; + mutableURI = [[URI mutableCopy] autorelease]; + mutableURI.percentEncodedPath = @"/"; + components = URI.pathComponents; + componentURIs = [OFMutableArray arrayWithCapacity: components.count]; for (OFString *component in components) { - [mutableURL appendPathComponent: component]; + [mutableURI appendPathComponent: component]; - if (![mutableURL.URLEncodedPath isEqual: @"/"]) - [componentURLs addObject: - [[mutableURL copy] autorelease]]; + if (![mutableURI.percentEncodedPath isEqual: @"/"]) + [componentURIs addObject: + [[mutableURI copy] autorelease]]; } - componentURLsCount = componentURLs.count; - for (i = componentURLsCount - 1; i > 0; i--) { - if ([self directoryExistsAtURL: - [componentURLs objectAtIndex: i]]) + componentURIsCount = componentURIs.count; + for (i = componentURIsCount - 1; i > 0; i--) { + if ([self directoryExistsAtURI: + [componentURIs objectAtIndex: i]]) break; } - if (++i == (ssize_t)componentURLsCount) { + if (++i == (ssize_t)componentURIsCount) { /* - * The URL exists, even though before we made sure it did not. + * The URI exists, even though before we made sure it did not. * That means it was created in the meantime by something else, * so we're done here. */ objc_autoreleasePoolPop(pool); return; } - for (; i < (ssize_t)componentURLsCount; i++) - [self createDirectoryAtURL: [componentURLs objectAtIndex: i]]; + for (; i < (ssize_t)componentURIsCount; i++) + [self createDirectoryAtURI: [componentURIs objectAtIndex: i]]; objc_autoreleasePoolPop(pool); } #ifdef OF_HAVE_FILES - (void)createDirectoryAtPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); - [self createDirectoryAtURL: [OFURL fileURLWithPath: path]]; + [self createDirectoryAtURI: [OFURI fileURIWithPath: path]]; objc_autoreleasePoolPop(pool); } - (void)createDirectoryAtPath: (OFString *)path createParents: (bool)createParents { void *pool = objc_autoreleasePoolPush(); - [self createDirectoryAtURL: [OFURL fileURLWithPath: path] + [self createDirectoryAtURI: [OFURI fileURIWithPath: path] createParents: createParents]; objc_autoreleasePoolPop(pool); } #endif -- (OFArray OF_GENERIC(OFURL *) *)contentsOfDirectoryAtURL: (OFURL *)URL +- (OFArray OF_GENERIC(OFURI *) *)contentsOfDirectoryAtURI: (OFURI *)URI { - OFURLHandler *URLHandler; + OFURIHandler *URIHandler; - if (URL == nil) + if (URI == nil) @throw [OFInvalidArgumentException exception]; - if ((URLHandler = [OFURLHandler handlerForURL: URL]) == nil) - @throw [OFUnsupportedProtocolException exceptionWithURL: URL]; + if ((URIHandler = [OFURIHandler handlerForURI: URI]) == nil) + @throw [OFUnsupportedProtocolException exceptionWithURI: URI]; - return [URLHandler contentsOfDirectoryAtURL: URL]; + return [URIHandler contentsOfDirectoryAtURI: URI]; } #ifdef OF_HAVE_FILES - (OFArray OF_GENERIC(OFString *) *)contentsOfDirectoryAtPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); - OFArray OF_GENERIC(OFURL *) *URLs; + OFArray OF_GENERIC(OFURI *) *URIs; OFMutableArray OF_GENERIC(OFString *) *ret; - URLs = [self contentsOfDirectoryAtURL: [OFURL fileURLWithPath: path]]; - ret = [OFMutableArray arrayWithCapacity: URLs.count]; + URIs = [self contentsOfDirectoryAtURI: [OFURI fileURIWithPath: path]]; + ret = [OFMutableArray arrayWithCapacity: URIs.count]; - for (OFURL *URL in URLs) - [ret addObject: URL.lastPathComponent]; + for (OFURI *URI in URIs) + [ret addObject: URI.lastPathComponent]; [ret makeImmutable]; [ret retain]; objc_autoreleasePoolPop(pool); @@ -544,71 +543,71 @@ exceptionWithPath: path errNo: errno]; # endif } -- (void)changeCurrentDirectoryURL: (OFURL *)URL +- (void)changeCurrentDirectoryURI: (OFURI *)URI { void *pool = objc_autoreleasePoolPush(); - [self changeCurrentDirectoryPath: URL.fileSystemRepresentation]; + [self changeCurrentDirectoryPath: URI.fileSystemRepresentation]; objc_autoreleasePoolPop(pool); } - (void)copyItemAtPath: (OFString *)source toPath: (OFString *)destination { void *pool = objc_autoreleasePoolPush(); - [self copyItemAtURL: [OFURL fileURLWithPath: source] - toURL: [OFURL fileURLWithPath: destination]]; + [self copyItemAtURI: [OFURI fileURIWithPath: source] + toURI: [OFURI fileURIWithPath: destination]]; objc_autoreleasePoolPop(pool); } #endif -- (void)copyItemAtURL: (OFURL *)source toURL: (OFURL *)destination +- (void)copyItemAtURI: (OFURI *)source toURI: (OFURI *)destination { void *pool; - OFURLHandler *URLHandler; + OFURIHandler *URIHandler; OFFileAttributes attributes; OFFileAttributeType type; if (source == nil || destination == nil) @throw [OFInvalidArgumentException exception]; pool = objc_autoreleasePoolPush(); - if ((URLHandler = [OFURLHandler handlerForURL: source]) == nil) + if ((URIHandler = [OFURIHandler handlerForURI: source]) == nil) @throw [OFUnsupportedProtocolException - exceptionWithURL: source]; + exceptionWithURI: source]; - if ([URLHandler copyItemAtURL: source toURL: destination]) + if ([URIHandler copyItemAtURI: source toURI: destination]) return; - if ([self fileExistsAtURL: destination]) + if ([self fileExistsAtURI: destination]) @throw [OFCopyItemFailedException - exceptionWithSourceURL: source - destinationURL: destination + exceptionWithSourceURI: source + destinationURI: destination errNo: EEXIST]; @try { - attributes = [self attributesOfItemAtURL: source]; + attributes = [self attributesOfItemAtURI: source]; } @catch (OFGetItemAttributesFailedException *e) { @throw [OFCopyItemFailedException - exceptionWithSourceURL: source - destinationURL: destination + exceptionWithSourceURI: source + destinationURI: destination errNo: e.errNo]; } type = attributes.fileType; if ([type isEqual: OFFileTypeDirectory]) { - OFArray OF_GENERIC(OFURL *) *contents; + OFArray OF_GENERIC(OFURI *) *contents; @try { - [self createDirectoryAtURL: destination]; + [self createDirectoryAtURI: destination]; @try { OFFileAttributeKey key = OFFilePOSIXPermissions; OFNumber *permissions = [attributes objectForKey: key]; @@ -618,39 +617,39 @@ destinationAttributes = [OFDictionary dictionaryWithObject: permissions forKey: key]; [self setAttributes: destinationAttributes - ofItemAtURL: destination]; + ofItemAtURI: destination]; } } @catch (OFNotImplementedException *e) { } - contents = [self contentsOfDirectoryAtURL: source]; + contents = [self contentsOfDirectoryAtURI: source]; } @catch (id e) { /* * Only convert exceptions to OFCopyItemFailedException * that have an errNo property. This covers all I/O * related exceptions from the operations used to copy * an item, all others should be left as is. */ if ([e respondsToSelector: @selector(errNo)]) @throw [OFCopyItemFailedException - exceptionWithSourceURL: source - destinationURL: destination + exceptionWithSourceURI: source + destinationURI: destination errNo: [e errNo]]; @throw e; } - for (OFURL *item in contents) { + for (OFURI *item in contents) { void *pool2 = objc_autoreleasePoolPush(); - OFURL *destinationURL = [destination - URLByAppendingPathComponent: + OFURI *destinationURI = [destination + URIByAppendingPathComponent: item.lastPathComponent]; - [self copyItemAtURL: item toURL: destinationURL]; + [self copyItemAtURI: item toURI: destinationURI]; objc_autoreleasePoolPop(pool2); } } else if ([type isEqual: OFFileTypeRegular]) { size_t pageSize = [OFSystemInfo pageSize]; @@ -658,14 +657,14 @@ OFStream *destinationStream = nil; char *buffer; buffer = OFAllocMemory(1, pageSize); @try { - sourceStream = [OFURLHandler openItemAtURL: source + sourceStream = [OFURIHandler openItemAtURI: source mode: @"r"]; - destinationStream = [OFURLHandler - openItemAtURL: destination + destinationStream = [OFURIHandler + openItemAtURI: destination mode: @"w"]; while (!sourceStream.atEndOfStream) { size_t length; @@ -686,11 +685,11 @@ destinationAttributes = [OFDictionary dictionaryWithObject: permissions forKey: key]; [self setAttributes: destinationAttributes - ofItemAtURL: destination]; + ofItemAtURI: destination]; } } @catch (OFNotImplementedException *e) { } } @catch (id e) { /* @@ -699,12 +698,12 @@ * related exceptions from the operations used to copy * an item, all others should be left as is. */ if ([e respondsToSelector: @selector(errNo)]) @throw [OFCopyItemFailedException - exceptionWithSourceURL: source - destinationURL: destination + exceptionWithSourceURI: source + destinationURI: destination errNo: [e errNo]]; @throw e; } @finally { [sourceStream close]; @@ -714,11 +713,11 @@ } else if ([type isEqual: OFFileTypeSymbolicLink]) { @try { OFString *linkDestination = attributes.fileSymbolicLinkDestination; - [self createSymbolicLinkAtURL: destination + [self createSymbolicLinkAtURI: destination withDestinationPath: linkDestination]; } @catch (id e) { /* * Only convert exceptions to OFCopyItemFailedException * that have an errNo property. This covers all I/O @@ -725,165 +724,165 @@ * related exceptions from the operations used to copy * an item, all others should be left as is. */ if ([e respondsToSelector: @selector(errNo)]) @throw [OFCopyItemFailedException - exceptionWithSourceURL: source - destinationURL: destination + exceptionWithSourceURI: source + destinationURI: destination errNo: [e errNo]]; @throw e; } } else @throw [OFCopyItemFailedException - exceptionWithSourceURL: source - destinationURL: destination + exceptionWithSourceURI: source + destinationURI: destination errNo: EINVAL]; objc_autoreleasePoolPop(pool); } #ifdef OF_HAVE_FILES - (void)moveItemAtPath: (OFString *)source toPath: (OFString *)destination { void *pool = objc_autoreleasePoolPush(); - [self moveItemAtURL: [OFURL fileURLWithPath: source] - toURL: [OFURL fileURLWithPath: destination]]; + [self moveItemAtURI: [OFURI fileURIWithPath: source] + toURI: [OFURI fileURIWithPath: destination]]; objc_autoreleasePoolPop(pool); } #endif -- (void)moveItemAtURL: (OFURL *)source toURL: (OFURL *)destination +- (void)moveItemAtURI: (OFURI *)source toURI: (OFURI *)destination { void *pool; - OFURLHandler *URLHandler; + OFURIHandler *URIHandler; if (source == nil || destination == nil) @throw [OFInvalidArgumentException exception]; pool = objc_autoreleasePoolPush(); - if ((URLHandler = [OFURLHandler handlerForURL: source]) == nil) + if ((URIHandler = [OFURIHandler handlerForURI: source]) == nil) @throw [OFUnsupportedProtocolException - exceptionWithURL: source]; + exceptionWithURI: source]; @try { - if ([URLHandler moveItemAtURL: source toURL: destination]) + if ([URIHandler moveItemAtURI: source toURI: destination]) return; } @catch (OFMoveItemFailedException *e) { if (e.errNo != EXDEV) @throw e; } - if ([self fileExistsAtURL: destination]) + if ([self fileExistsAtURI: destination]) @throw [OFMoveItemFailedException - exceptionWithSourceURL: source - destinationURL: destination + exceptionWithSourceURI: source + destinationURI: destination errNo: EEXIST]; @try { - [self copyItemAtURL: source toURL: destination]; + [self copyItemAtURI: source toURI: destination]; } @catch (OFCopyItemFailedException *e) { - [self removeItemAtURL: destination]; + [self removeItemAtURI: destination]; @throw [OFMoveItemFailedException - exceptionWithSourceURL: source - destinationURL: destination + exceptionWithSourceURI: source + destinationURI: destination errNo: e.errNo]; } @try { - [self removeItemAtURL: source]; + [self removeItemAtURI: source]; } @catch (OFRemoveItemFailedException *e) { @throw [OFMoveItemFailedException - exceptionWithSourceURL: source - destinationURL: destination + exceptionWithSourceURI: source + destinationURI: destination errNo: e.errNo]; } objc_autoreleasePoolPop(pool); } -- (void)removeItemAtURL: (OFURL *)URL +- (void)removeItemAtURI: (OFURI *)URI { - OFURLHandler *URLHandler; + OFURIHandler *URIHandler; - if (URL == nil) + if (URI == nil) @throw [OFInvalidArgumentException exception]; - if ((URLHandler = [OFURLHandler handlerForURL: URL]) == nil) - @throw [OFUnsupportedProtocolException exceptionWithURL: URL]; + if ((URIHandler = [OFURIHandler handlerForURI: URI]) == nil) + @throw [OFUnsupportedProtocolException exceptionWithURI: URI]; - [URLHandler removeItemAtURL: URL]; + [URIHandler removeItemAtURI: URI]; } #ifdef OF_HAVE_FILES - (void)removeItemAtPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); - [self removeItemAtURL: [OFURL fileURLWithPath: path]]; + [self removeItemAtURI: [OFURI fileURIWithPath: path]]; objc_autoreleasePoolPop(pool); } #endif -- (void)linkItemAtURL: (OFURL *)source toURL: (OFURL *)destination +- (void)linkItemAtURI: (OFURI *)source toURI: (OFURI *)destination { void *pool = objc_autoreleasePoolPush(); - OFURLHandler *URLHandler; + OFURIHandler *URIHandler; if (source == nil || destination == nil) @throw [OFInvalidArgumentException exception]; if (![destination.scheme isEqual: source.scheme]) @throw [OFInvalidArgumentException exception]; - URLHandler = [OFURLHandler handlerForURL: source]; + URIHandler = [OFURIHandler handlerForURI: source]; - if (URLHandler == nil) + if (URIHandler == nil) @throw [OFUnsupportedProtocolException - exceptionWithURL: source]; + exceptionWithURI: source]; - [URLHandler linkItemAtURL: source toURL: destination]; + [URIHandler linkItemAtURI: source toURI: destination]; objc_autoreleasePoolPop(pool); } #ifdef OF_FILE_MANAGER_SUPPORTS_LINKS - (void)linkItemAtPath: (OFString *)source toPath: (OFString *)destination { void *pool = objc_autoreleasePoolPush(); - [self linkItemAtURL: [OFURL fileURLWithPath: source] - toURL: [OFURL fileURLWithPath: destination]]; + [self linkItemAtURI: [OFURI fileURIWithPath: source] + toURI: [OFURI fileURIWithPath: destination]]; objc_autoreleasePoolPop(pool); } #endif -- (void)createSymbolicLinkAtURL: (OFURL *)URL +- (void)createSymbolicLinkAtURI: (OFURI *)URI withDestinationPath: (OFString *)target { void *pool = objc_autoreleasePoolPush(); - OFURLHandler *URLHandler; + OFURIHandler *URIHandler; - if (URL == nil || target == nil) + if (URI == nil || target == nil) @throw [OFInvalidArgumentException exception]; - URLHandler = [OFURLHandler handlerForURL: URL]; + URIHandler = [OFURIHandler handlerForURI: URI]; - if (URLHandler == nil) - @throw [OFUnsupportedProtocolException exceptionWithURL: URL]; + if (URIHandler == nil) + @throw [OFUnsupportedProtocolException exceptionWithURI: URI]; - [URLHandler createSymbolicLinkAtURL: URL withDestinationPath: target]; + [URIHandler createSymbolicLinkAtURI: URI withDestinationPath: target]; objc_autoreleasePoolPop(pool); } #ifdef OF_FILE_MANAGER_SUPPORTS_SYMLINKS - (void)createSymbolicLinkAtPath: (OFString *)path withDestinationPath: (OFString *)target { void *pool = objc_autoreleasePoolPush(); - [self createSymbolicLinkAtURL: [OFURL fileURLWithPath: path] + [self createSymbolicLinkAtURI: [OFURI fileURIWithPath: path] withDestinationPath: target]; objc_autoreleasePoolPop(pool); } #endif @end