Skip to content

Commit 0209a88

Browse files
committed
Drop read/write/close LibcShims and use the platform APIs directly from the SwiftPrivate module
1 parent 7ee6cb7 commit 0209a88

File tree

5 files changed

+23
-53
lines changed

5 files changed

+23
-53
lines changed

stdlib/private/CMakeLists.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
if(SWIFT_BUILD_STDLIB OR SWIFT_BUILD_SDK_OVERLAY)
2-
add_subdirectory(SwiftPrivate)
3-
endif()
4-
51
if(SWIFT_BUILD_SDK_OVERLAY)
62
# SwiftPrivateThreadExtras makes use of Darwin/Glibc, which is part of the
73
# SDK overlay. It can't be built separately from the SDK overlay.
@@ -11,6 +7,7 @@ if(SWIFT_BUILD_SDK_OVERLAY)
117
endif()
128

139
if(SWIFT_BUILD_SDK_OVERLAY OR SWIFT_BUILD_TEST_SUPPORT_MODULES)
10+
add_subdirectory(SwiftPrivate)
1411
add_subdirectory(RuntimeUnittest)
1512
add_subdirectory(StdlibUnicodeUnittest)
1613
add_subdirectory(StdlibCollectionUnittest)

stdlib/private/SwiftPrivate/CMakeLists.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,16 @@ add_swift_target_library(swiftSwiftPrivate ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} I
1515
GYB_SOURCES
1616
AtomicInt.swift.gyb
1717

18+
SWIFT_MODULE_DEPENDS_OSX Darwin
19+
SWIFT_MODULE_DEPENDS_IOS Darwin
20+
SWIFT_MODULE_DEPENDS_TVOS Darwin
21+
SWIFT_MODULE_DEPENDS_WATCHOS Darwin
22+
SWIFT_MODULE_DEPENDS_FREESTANDING "${SWIFT_FREESTANDING_TEST_DEPENDENCIES}"
23+
SWIFT_MODULE_DEPENDS_LINUX Glibc
24+
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
25+
SWIFT_MODULE_DEPENDS_OPENBSD Glibc
26+
SWIFT_MODULE_DEPENDS_CYGWIN Glibc
27+
SWIFT_MODULE_DEPENDS_HAIKU Glibc
1828
SWIFT_MODULE_DEPENDS_WINDOWS CRT WinSDK
1929
SWIFT_COMPILE_FLAGS ${swift_swiftprivate_compile_flags} ${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS}
2030
INSTALL_IN_COMPONENT stdlib-experimental

stdlib/private/SwiftPrivate/IO.swift

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,13 @@
1313
import Swift
1414
import SwiftShims
1515

16-
#if os(Windows)
16+
#if canImport(Darwin)
17+
import Darwin
18+
let (platform_read, platform_write, platform_close) = (read, write, close)
19+
#elseif canImport(Glibc)
20+
import Glibc
21+
let (platform_read, platform_write, platform_close) = (read, write, close)
22+
#elseif os(Windows)
1723
import CRT
1824
import WinSDK
1925
#endif
@@ -119,11 +125,11 @@ public struct _FDInputStream {
119125
}
120126
}
121127
let fd = self.fd
122-
let readResult: __swift_ssize_t = _buffer.withUnsafeMutableBufferPointer {
128+
let readResult: Int = _buffer.withUnsafeMutableBufferPointer {
123129
(_buffer) in
124130
let addr = _buffer.baseAddress! + self._bufferUsed
125131
let size = bufferFree
126-
return _swift_stdlib_read(fd, addr, size)
132+
return platform_read(fd, addr, size)
127133
}
128134
if readResult == 0 {
129135
isEOF = true
@@ -139,7 +145,7 @@ public struct _FDInputStream {
139145
if isClosed {
140146
return
141147
}
142-
let result = _swift_stdlib_close(fd)
148+
let result = platform_close(fd)
143149
if result < 0 {
144150
fatalError("close() returned an error")
145151
}
@@ -207,7 +213,7 @@ public struct _FDOutputStream : TextOutputStream {
207213
var writtenBytes = 0
208214
let bufferSize = utf8CStr.count - 1
209215
while writtenBytes != bufferSize {
210-
let result = _swift_stdlib_write(
216+
let result = platform_write(
211217
self.fd, UnsafeRawPointer(utf8CStr.baseAddress! + Int(writtenBytes)),
212218
bufferSize - writtenBytes)
213219
if result < 0 {
@@ -222,7 +228,7 @@ public struct _FDOutputStream : TextOutputStream {
222228
if isClosed {
223229
return
224230
}
225-
let result = _swift_stdlib_close(fd)
231+
let result = platform_close(fd)
226232
if result < 0 {
227233
fatalError("close() returned an error")
228234
}

stdlib/public/SwiftShims/LibcShims.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,6 @@ static inline void _swift_stdlib_free(void *_Nullable ptr) {
4545
free(ptr);
4646
}
4747

48-
// <unistd.h>
49-
SWIFT_RUNTIME_STDLIB_SPI
50-
__swift_ssize_t _swift_stdlib_read(int fd, void *buf, __swift_size_t nbyte);
51-
SWIFT_RUNTIME_STDLIB_SPI
52-
__swift_ssize_t _swift_stdlib_write(int fd, const void *buf, __swift_size_t nbyte);
53-
SWIFT_RUNTIME_STDLIB_SPI
54-
int _swift_stdlib_close(int fd);
55-
5648
// String handling <string.h>
5749
SWIFT_READONLY
5850
static inline __swift_size_t _swift_stdlib_strlen(const char *s) {

stdlib/public/stubs/LibcShims.cpp

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,6 @@
2222
#endif
2323

2424
#include <stdio.h>
25-
#include <sys/types.h>
26-
#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) || defined(__wasi__)
27-
#include <unistd.h>
28-
#endif
29-
30-
#include <type_traits>
3125

3226
#include "../SwiftShims/LibcShims.h"
3327

@@ -37,32 +31,3 @@ __swift_size_t _swift_stdlib_fwrite_stdout(const void *ptr,
3731
__swift_size_t nitems) {
3832
return fwrite(ptr, size, nitems, stdout);
3933
}
40-
41-
SWIFT_RUNTIME_STDLIB_SPI
42-
__swift_ssize_t
43-
_swift_stdlib_read(int fd, void *buf, __swift_size_t nbyte) {
44-
#if defined(_WIN32)
45-
return _read(fd, buf, nbyte);
46-
#else
47-
return read(fd, buf, nbyte);
48-
#endif
49-
}
50-
51-
SWIFT_RUNTIME_STDLIB_SPI
52-
__swift_ssize_t
53-
_swift_stdlib_write(int fd, const void *buf, __swift_size_t nbyte) {
54-
#if defined(_WIN32)
55-
return _write(fd, buf, nbyte);
56-
#else
57-
return write(fd, buf, nbyte);
58-
#endif
59-
}
60-
61-
SWIFT_RUNTIME_STDLIB_SPI
62-
int _swift_stdlib_close(int fd) {
63-
#if defined(_WIN32)
64-
return _close(fd);
65-
#else
66-
return close(fd);
67-
#endif
68-
}

0 commit comments

Comments
 (0)