From 88a2e0809fb964ff0ab34f13ebc55b6d44becafd Mon Sep 17 00:00:00 2001 From: Frederik Seiffert Date: Tue, 17 Nov 2020 16:58:29 +0100 Subject: [PATCH] Add NSFileHandle URL initializers. Also use "instancetype" for all initializers. --- ChangeLog | 9 +++++++++ Headers/Foundation/NSFileHandle.h | 21 ++++++++++++++------- MISSING | 8 +------- Source/NSFileHandle.m | 31 +++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index da3e3b2ff..24d17d639 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2020-11-17 Frederik Seiffert + + * Headers/Foundation/NSFileHandle.h, + * Source/NSFileHandle.h: Add NSFileHandle URL initializers: + -fileHandleForReadingFromURL:error: + -fileHandleForWritingToURL:error: + -fileHandleForUpdatingURL:error: + Also use "instancetype" for all initializers. + 2020-10-11 Adam Fox * Source/NSData.m: Implement rangeOfData:options:range. diff --git a/Headers/Foundation/NSFileHandle.h b/Headers/Foundation/NSFileHandle.h index 566d4b4d7..c6f9a3667 100644 --- a/Headers/Foundation/NSFileHandle.h +++ b/Headers/Foundation/NSFileHandle.h @@ -38,18 +38,25 @@ extern "C" { @class NSData; @class NSString; +@class NSError; @interface NSFileHandle : NSObject // Allocating and Initializing a FileHandle Object -+ (id) fileHandleForReadingAtPath: (NSString*)path; -+ (id) fileHandleForWritingAtPath: (NSString*)path; -+ (id) fileHandleForUpdatingAtPath: (NSString*)path; -+ (id) fileHandleWithStandardError; -+ (id) fileHandleWithStandardInput; -+ (id) fileHandleWithStandardOutput; -+ (id) fileHandleWithNullDevice; ++ (instancetype) fileHandleForReadingAtPath: (NSString*)path; ++ (instancetype) fileHandleForWritingAtPath: (NSString*)path; ++ (instancetype) fileHandleForUpdatingAtPath: (NSString*)path; ++ (instancetype) fileHandleWithStandardError; ++ (instancetype) fileHandleWithStandardInput; ++ (instancetype) fileHandleWithStandardOutput; ++ (instancetype) fileHandleWithNullDevice; + +#if OS_API_VERSION(MAC_OS_X_VERSION_10_6, GS_API_LATEST) ++ (instancetype) fileHandleForReadingFromURL: (NSURL*)url error:(NSError**)error; ++ (instancetype) fileHandleForWritingToURL: (NSURL*)url error:(NSError**)error; ++ (instancetype) fileHandleForUpdatingURL: (NSURL*)url error:(NSError**)error; +#endif - (id) initWithFileDescriptor: (int)desc; - (id) initWithFileDescriptor: (int)desc closeOnDealloc: (BOOL)flag; diff --git a/MISSING b/MISSING index 53c1f8d32..0cde742e9 100644 --- a/MISSING +++ b/MISSING @@ -200,15 +200,9 @@ NSExpression: - rightExpression - expressionBlock ------------------------------------------------------------- -NSFileHandler: +NSFileHandle: - @class NSError - - + fileHandleForReadingFromURL:error: - + fileHandleForWritingToURL:error: - + fileHandleForUpdatingURL:error: - @property (copy) void (^readabilityHandler)(NSFileHandle *) @property (copy) void (^writeabilityHandler)(NSFileHandle *) ------------------------------------------------------------- diff --git a/Source/NSFileHandle.m b/Source/NSFileHandle.m index 885632a57..2713e6bfa 100644 --- a/Source/NSFileHandle.m +++ b/Source/NSFileHandle.m @@ -32,6 +32,7 @@ #import "Foundation/NSHost.h" #import "Foundation/NSFileHandle.h" #import "Foundation/NSPathUtilities.h" +#import "Foundation/NSURL.h" #import "GNUstepBase/GSTLS.h" #import "GNUstepBase/NSString+GNUstepBase.h" #import "GSPrivate.h" @@ -198,6 +199,36 @@ static Class NSFileHandle_ssl_class = nil; return AUTORELEASE([o initWithNullDevice]); } ++ (id) fileHandleForReadingFromURL: (NSURL*)url error:(NSError**)error +{ + id o = [self fileHandleForReadingAtPath: [url path]]; + if (!o && error) + { + *error = [NSError _last]; + } + return o; +} + ++ (id) fileHandleForWritingToURL: (NSURL*)url error:(NSError**)error +{ + id o = [self fileHandleForWritingAtPath: [url path]]; + if (!o && error) + { + *error = [NSError _last]; + } + return o; +} + ++ (id) fileHandleForUpdatingURL: (NSURL*)url error:(NSError**)error +{ + id o = [self fileHandleForUpdatingAtPath: [url path]]; + if (!o && error) + { + *error = [NSError _last]; + } + return o; +} + /** * Initialize with desc, which can point to either a regular file or * socket connection.