Skip to content

Commit 6a35c5a

Browse files
committed
Correct stream access points and fix #ifdefs gating open
1 parent 83d2c3c commit 6a35c5a

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

CoreFoundation/Base.subproj/ForSwiftFoundationOnly.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,10 @@ CF_EXPORT CFMutableCharacterSetRef _CFCharacterSetCreateMutableCopy(CFAllocatorR
304304

305305
CF_EXPORT CFReadStreamRef CFReadStreamCreateWithData(CFAllocatorRef alloc, CFDataRef data);
306306

307+
CF_EXPORT _Nullable CFErrorRef _CFReadStreamCopyError(CFReadStreamRef stream);
308+
309+
CF_EXPORT _Nullable CFErrorRef _CFWriteStreamCopyError(CFWriteStreamRef stream);
310+
307311
_CF_EXPORT_SCOPE_END
308312

309313
#endif /* __COREFOUNDATION_FORSWIFTFOUNDATIONONLY__ */

CoreFoundation/Stream.subproj/CFConcreteStreams.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ static Boolean constructFD(_CFFileStreamContext *fileStream, CFStreamError *erro
8383
wchar_t path[CFMaxPathSize];
8484
flags |= (_O_BINARY|_O_NOINHERIT);
8585
if (_CFURLGetWideFileSystemRepresentation(fileStream->url, TRUE, path, CFMaxPathSize) == FALSE)
86-
#elif DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED || DEPLOYMENT_TARGET_EMBEDDED_MINI
86+
#else
8787
char path[CFMaxPathSize];
8888
if (CFURLGetFileSystemRepresentation(fileStream->url, TRUE, (UInt8 *)path, CFMaxPathSize) == FALSE)
8989
#endif
@@ -98,10 +98,10 @@ static Boolean constructFD(_CFFileStreamContext *fileStream, CFStreamError *erro
9898
}
9999

100100
do {
101-
#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED || DEPLOYMENT_TARGET_EMBEDDED_MINI
101+
#if DEPLOYMENT_TARGET_WINDOWS
102+
fileStream->fd = _wopen(path, flags, 0666);
103+
#else
102104
fileStream->fd = open((const char *)path, flags, 0666);
103-
#elif DEPLOYMENT_TARGET_WINDOWS
104-
fileStream->fd = _wopen(path, flags, 0666);
105105
#endif
106106
if (fileStream->fd < 0)
107107
break;
@@ -865,5 +865,10 @@ CF_EXPORT CFWriteStreamRef CFWriteStreamCreateWithAllocatedBuffers(CFAllocatorRe
865865
return (CFWriteStreamRef)_CFStreamCreateWithConstantCallbacks(alloc, &ctxt, (struct _CFStreamCallBacks *)(&writeDataCallBacks), FALSE);
866866
}
867867

868+
CF_SWIFT_EXPORT _Nullable CFErrorRef _CFReadStreamCopyError(CFReadStreamRef stream) { return CFReadStreamCopyError(stream); }
869+
870+
CF_SWIFT_EXPORT _Nullable CFErrorRef _CFWriteStreamCopyError(CFWriteStreamRef stream) { return CFWriteStreamCopyError(stream); }
871+
872+
868873
#undef BUF_SIZE
869874

Foundation/NSStream.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ open class Stream: NSObject {
111111
}
112112

113113
open var streamError: NSError? {
114-
NSUnimplemented()
114+
NSRequiresConcreteImplementation()
115115
}
116116
}
117117

@@ -159,6 +159,10 @@ open class InputStream: Stream {
159159
open override var streamStatus: Status {
160160
return Stream.Status(rawValue: UInt(CFReadStreamGetStatus(_stream)))!
161161
}
162+
163+
open override var streamError: NSError? {
164+
return _CFReadStreamCopyError(_stream)?._nsObject
165+
}
162166
}
163167

164168
// OutputStream is an abstract class representing the base functionality of a write stream.
@@ -219,6 +223,10 @@ open class OutputStream : Stream {
219223
open override func setProperty(_ property: AnyObject?, forKey key: PropertyKey) -> Bool {
220224
return CFWriteStreamSetProperty(_stream, key.rawValue._cfObject, property)
221225
}
226+
227+
open override var streamError: NSError? {
228+
return _CFWriteStreamCopyError(_stream)?._nsObject
229+
}
222230
}
223231

224232
// Discussion of this API is ongoing for its usage of AutoreleasingUnsafeMutablePointer

0 commit comments

Comments
 (0)