Skip to content

Commit 1483b6f

Browse files
authored
Merge branch 'master' into jw-dont-inherit-fds
2 parents e0e56a1 + 2195121 commit 1483b6f

39 files changed

+985
-1468
lines changed

CMakeLists.txt

Lines changed: 22 additions & 668 deletions
Large diffs are not rendered by default.

CoreFoundation/Base.subproj/CFPlatform.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -906,15 +906,16 @@ CF_EXPORT int _NS_open(const char *name, int oflag, int pmode) {
906906

907907
DWORD dwCreationDisposition;
908908
switch (oflag & (O_CREAT | O_EXCL | O_TRUNC)) {
909+
case O_CREAT | O_EXCL | O_TRUNC:
910+
case O_CREAT | O_EXCL:
911+
dwCreationDisposition = CREATE_NEW;
912+
break;
909913
case O_CREAT | O_TRUNC:
910914
dwCreationDisposition = CREATE_ALWAYS;
911915
break;
912916
case O_CREAT:
913917
dwCreationDisposition = OPEN_ALWAYS;
914918
break;
915-
case O_EXCL:
916-
dwCreationDisposition = CREATE_NEW;
917-
break;
918919
case O_TRUNC:
919920
dwCreationDisposition = TRUNCATE_EXISTING;
920921
break;

CoreFoundation/CMakeLists.txt

Lines changed: 16 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ endif()
2121
set(CMAKE_POSITION_INDEPENDENT_CODE YES)
2222

2323
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
24-
set(THREADS_PREFER_PTHREAD_FLAG ON)
24+
set(THREADS_PREFER_PTHREAD_FLAG OFF)
2525
find_package(Threads)
2626

2727
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
@@ -33,8 +33,6 @@ endif()
3333
include(GNUInstallDirs)
3434
include(CoreFoundationAddFramework)
3535

36-
option(CF_PATH_TO_LIBDISPATCH_SOURCE "Path to libdispatch source")
37-
option(CF_PATH_TO_LIBDISPATCH_BUILD "Path to libdispatch build")
3836
option(CF_DEPLOYMENT_SWIFT "Build for swift" NO)
3937

4038
if("${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC")
@@ -383,14 +381,14 @@ target_include_directories(CoreFoundation
383381
PRIVATE
384382
${PROJECT_SOURCE_DIR}
385383
${ICU_INCLUDE_DIR})
386-
target_link_libraries(CoreFoundation
387-
PRIVATE
388-
Threads::Threads
389-
${CMAKE_DL_LIBS})
384+
target_link_libraries(CoreFoundation PRIVATE
385+
Threads::Threads
386+
${CMAKE_DL_LIBS}
387+
BlocksRuntime
388+
dispatch)
390389
if(CMAKE_SYSTEM_NAME STREQUAL Android)
391-
target_link_libraries(CoreFoundation
392-
PRIVATE
393-
log)
390+
target_link_libraries(CoreFoundation PRIVATE
391+
log)
394392
endif()
395393

396394
add_framework(CFURLSessionInterface
@@ -411,12 +409,10 @@ if(CMAKE_SYSTEM_NAME STREQUAL Windows)
411409
PRIVATE
412410
CURL_STATICLIB)
413411
endif()
414-
target_include_directories(CFURLSessionInterface
415-
PRIVATE
416-
${CURL_INCLUDE_DIRS})
417-
target_link_libraries(CFURLSessionInterface
418-
PRIVATE
419-
${CURL_LIBRARIES})
412+
target_include_directories(CFURLSessionInterface PRIVATE
413+
${CURL_INCLUDE_DIRS})
414+
target_link_libraries(CFURLSessionInterface PRIVATE
415+
${CURL_LIBRARIES})
420416

421417
add_framework(CFXMLInterface
422418
${FRAMEWORK_LIBRARY_TYPE}
@@ -431,12 +427,10 @@ add_framework(CFXMLInterface
431427
SOURCES
432428
Parsing.subproj/CFXMLInterface.c)
433429
add_dependencies(CFXMLInterface CoreFoundation)
434-
target_include_directories(CFXMLInterface
435-
PRIVATE
436-
${LIBXML2_INCLUDE_DIR})
437-
target_link_libraries(CFXMLInterface
438-
PRIVATE
439-
${LIBXML2_LIBRARIES})
430+
target_include_directories(CFXMLInterface PRIVATE
431+
${LIBXML2_INCLUDE_DIR})
432+
target_link_libraries(CFXMLInterface PRIVATE
433+
${LIBXML2_LIBRARIES})
440434

441435
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
442436
add_library(CoreFoundationResources OBJECT
@@ -456,30 +450,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL Windows)
456450
add_dependencies(CoreFoundation CoreFoundationWindowsTimeZonesPLists)
457451
endif()
458452

459-
target_include_directories(CoreFoundation
460-
PRIVATE
461-
${CF_PATH_TO_LIBDISPATCH_SOURCE}
462-
${CF_PATH_TO_LIBDISPATCH_BUILD}/tests)
463-
target_include_directories(CFURLSessionInterface
464-
PRIVATE
465-
${CF_PATH_TO_LIBDISPATCH_SOURCE}
466-
${CF_PATH_TO_LIBDISPATCH_BUILD}/tests)
467-
target_include_directories(CFXMLInterface
468-
PRIVATE
469-
${CF_PATH_TO_LIBDISPATCH_SOURCE}
470-
${CF_PATH_TO_LIBDISPATCH_BUILD}/tests)
471-
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
472-
target_include_directories(CoreFoundation
473-
SYSTEM PRIVATE
474-
${CF_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
475-
target_include_directories(CFURLSessionInterface
476-
SYSTEM PRIVATE
477-
${CF_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
478-
target_include_directories(CFXMLInterface
479-
SYSTEM PRIVATE
480-
${CF_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
481-
endif()
482-
483453
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
484454
target_link_libraries(CoreFoundation
485455
PRIVATE

CoreFoundation/PlugIn.subproj/CFBundle_Executable.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,20 @@ static CFURLRef _CFBundleCopyBundleURLForExecutablePath(CFStringRef str) {
310310
CFIndex buffLen;
311311
CFURLRef url = NULL;
312312
CFStringRef outstr;
313+
314+
#if TARGET_OS_ANDROID
315+
const char *fixedUserHome = __CFgetenv("CFFIXED_USER_HOME");
316+
if (fixedUserHome) {
317+
outstr = CFStringCreateWithCString(kCFAllocatorSystemDefault, fixedUserHome, kCFStringEncodingUTF8);
318+
if (outstr) {
319+
url = CFURLCreateWithFileSystemPath(kCFAllocatorSystemDefault, outstr, PLATFORM_PATH_STYLE, true);
320+
CFRelease(outstr);
321+
if (url) {
322+
return url;
323+
}
324+
}
325+
}
326+
#endif
313327

314328
buffLen = CFStringGetLength(str);
315329
if (buffLen > CFMaxPathSize) buffLen = CFMaxPathSize;

CoreFoundation/RunLoop.subproj/CFRunLoop.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2846,7 +2846,7 @@ static int32_t __CFRunLoopRun(CFRunLoopRef rl, CFRunLoopModeRef rlm, CFTimeInter
28462846
// Here, use the app-supplied message queue mask. They will set this if they are interested in having this run loop receive windows messages.
28472847
__CFRunLoopWaitForMultipleObjects(waitSet, NULL, poll ? 0 : TIMEOUT_INFINITY, rlm->_msgQMask, &livePort, &windowsMessageReceived);
28482848
#elif TARGET_OS_LINUX
2849-
__CFRunLoopServiceFileDescriptors(waitSet, CFPORT_NULL, TIMEOUT_INFINITY, &livePort);
2849+
__CFRunLoopServiceFileDescriptors(waitSet, CFPORT_NULL, poll ? 0 : TIMEOUT_INFINITY, &livePort);
28502850
#endif
28512851

28522852
__CFRunLoopLock(rl);

CoreFoundation/String.subproj/CFString.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -459,12 +459,12 @@ CFStringEncoding CFStringFileSystemEncoding(void) {
459459
CFIndex CFStringGetMaximumSizeForEncoding(CFIndex length, CFStringEncoding encoding) {
460460
if (encoding == kCFStringEncodingUTF8) {
461461
return (length > (LONG_MAX / 3)) ? kCFNotFound : (length * 3);
462-
} else if ((encoding == kCFStringEncodingUTF32) || (encoding == kCFStringEncodingUTF32BE) || (encoding == kCFStringEncodingUTF32LE)) { // UTF-32
462+
}
463+
if ((encoding == kCFStringEncodingUTF32) || (encoding == kCFStringEncodingUTF32BE) || (encoding == kCFStringEncodingUTF32LE)) { // UTF-32
463464
return (length > (LONG_MAX / sizeof(UTF32Char))) ? kCFNotFound : (length * sizeof(UTF32Char));
464-
} else {
465-
encoding &= 0xFFF; // Mask off non-base part
466465
}
467-
switch (encoding) {
466+
467+
switch (encoding & 0xFFF) { // Mask off non-base part
468468
case kCFStringEncodingUnicode:
469469
return (length > (LONG_MAX / sizeof(UniChar))) ? kCFNotFound : (length * sizeof(UniChar));
470470

@@ -476,8 +476,6 @@ CFIndex CFStringGetMaximumSizeForEncoding(CFIndex length, CFStringEncoding encod
476476
case kCFStringEncodingISOLatin1:
477477
case kCFStringEncodingNextStepLatin:
478478
case kCFStringEncodingASCII:
479-
return length / sizeof(uint8_t);
480-
481479
default:
482480
return length / sizeof(uint8_t);
483481
}

CoreFoundation/URL.subproj/CFURLSessionInterface.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,11 @@ CFURLSessionEasyCode const CFURLSessionEasyCodeFTP_CANT_GET_HOST = { CURLE_FTP_C
161161
CFURLSessionEasyCode const CFURLSessionEasyCodeFTP_COULDNT_SET_TYPE = { CURLE_FTP_COULDNT_SET_TYPE };
162162
CFURLSessionEasyCode const CFURLSessionEasyCodePARTIAL_FILE = { CURLE_PARTIAL_FILE };
163163
CFURLSessionEasyCode const CFURLSessionEasyCodeFTP_COULDNT_RETR_FILE = { CURLE_FTP_COULDNT_RETR_FILE };
164+
#if LIBCURL_VERSION_MAJOR > 7 || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR > 67) || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR == 67 && LIBCURL_VERSION_PATCH >= 1)
165+
CFURLSessionEasyCode const CFURLSessionEasyCodeHTTP3 = { CURLE_HTTP3 };
166+
#else
164167
CFURLSessionEasyCode const CFURLSessionEasyCodeOBSOLETE20 = { CURLE_OBSOLETE20 };
168+
#endif
165169
CFURLSessionEasyCode const CFURLSessionEasyCodeQUOTE_ERROR = { CURLE_QUOTE_ERROR };
166170
CFURLSessionEasyCode const CFURLSessionEasyCodeHTTP_RETURNED_ERROR = { CURLE_HTTP_RETURNED_ERROR };
167171
CFURLSessionEasyCode const CFURLSessionEasyCodeWRITE_ERROR = { CURLE_WRITE_ERROR };

CoreFoundation/URL.subproj/CFURLSessionInterface.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,11 @@ CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeFTP_CANT_GET_HOST; // C
8181
CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeFTP_COULDNT_SET_TYPE; // CURLE_FTP_COULDNT_SET_TYPE
8282
CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodePARTIAL_FILE; // CURLE_PARTIAL_FILE
8383
CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeFTP_COULDNT_RETR_FILE; // CURLE_FTP_COULDNT_RETR_FILE
84+
#if LIBCURL_VERSION_MAJOR > 7 || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR > 67) || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR == 67 && LIBCURL_VERSION_PATCH >= 1)
85+
CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeHTTP3; // CURLE_HTTP3
86+
#else
8487
CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeOBSOLETE20; // CURLE_OBSOLETE20
88+
#endif
8589
CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeQUOTE_ERROR; // CURLE_QUOTE_ERROR
8690
CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeHTTP_RETURNED_ERROR; // CURLE_HTTP_RETURNED_ERROR
8791
CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeWRITE_ERROR; // CURLE_WRITE_ERROR

DarwinCompatibilityTests.xcodeproj/project.pbxproj

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@
126126
B9C89FCC1F6DCAEB00087AF4 /* NSKeyedUnarchiver-NotificationTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = B9C89FB71F6DCAEB00087AF4 /* NSKeyedUnarchiver-NotificationTest.plist */; };
127127
B9C89FCD1F6DCAEB00087AF4 /* PropertyList-1.0.dtd in Resources */ = {isa = PBXBuildFile; fileRef = B9C89FB81F6DCAEB00087AF4 /* PropertyList-1.0.dtd */; };
128128
B9C89FCE1F6DCAEB00087AF4 /* Test.plist in Resources */ = {isa = PBXBuildFile; fileRef = B9C89FB91F6DCAEB00087AF4 /* Test.plist */; };
129+
B9ED84FD23641F7000A58AF2 /* DarwinShims.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9F3269E1FC714DD003C3599 /* DarwinShims.swift */; };
129130
B9F137A120B998D0000B7577 /* xdgTestHelper in CopyFiles */ = {isa = PBXBuildFile; fileRef = B917D31C20B0DB8B00728EE0 /* xdgTestHelper */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
130131
B9F326A01FC714DD003C3599 /* DarwinShims.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9F3269E1FC714DD003C3599 /* DarwinShims.swift */; };
131132
DAE7D0F320D8224200DC6C54 /* TestURLProtectionSpace.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE7D0F220D8224200DC6C54 /* TestURLProtectionSpace.swift */; };
@@ -605,6 +606,7 @@
605606
buildActionMask = 2147483647;
606607
files = (
607608
B917D32620B0DE2000728EE0 /* main.swift in Sources */,
609+
B9ED84FD23641F7000A58AF2 /* DarwinShims.swift in Sources */,
608610
);
609611
runOnlyForDeploymentPostprocessing = 0;
610612
};
@@ -727,7 +729,7 @@
727729
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
728730
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
729731
CODE_SIGN_STYLE = Automatic;
730-
MACOSX_DEPLOYMENT_TARGET = 10.14;
732+
MACOSX_DEPLOYMENT_TARGET = 10.15;
731733
OTHER_SWIFT_FLAGS = "-DDEPLOYMENT_RUNTIME_OBJC -DDARWIN_COMPATIBILITY_TESTS";
732734
PRODUCT_NAME = "$(TARGET_NAME)";
733735
SWIFT_VERSION = 5.0;
@@ -741,7 +743,7 @@
741743
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
742744
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
743745
CODE_SIGN_STYLE = Automatic;
744-
MACOSX_DEPLOYMENT_TARGET = 10.14;
746+
MACOSX_DEPLOYMENT_TARGET = 10.15;
745747
OTHER_SWIFT_FLAGS = "-DDEPLOYMENT_RUNTIME_OBJC -DDARWIN_COMPATIBILITY_TESTS";
746748
PRODUCT_NAME = "$(TARGET_NAME)";
747749
SWIFT_VERSION = 5.0;
@@ -796,7 +798,7 @@
796798
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
797799
GCC_WARN_UNUSED_FUNCTION = YES;
798800
GCC_WARN_UNUSED_VARIABLE = YES;
799-
MACOSX_DEPLOYMENT_TARGET = 10.14;
801+
MACOSX_DEPLOYMENT_TARGET = 10.15;
800802
MTL_ENABLE_DEBUG_INFO = YES;
801803
ONLY_ACTIVE_ARCH = YES;
802804
SDKROOT = macosx;
@@ -847,7 +849,7 @@
847849
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
848850
GCC_WARN_UNUSED_FUNCTION = YES;
849851
GCC_WARN_UNUSED_VARIABLE = YES;
850-
MACOSX_DEPLOYMENT_TARGET = 10.14;
852+
MACOSX_DEPLOYMENT_TARGET = 10.15;
851853
MTL_ENABLE_DEBUG_INFO = NO;
852854
SDKROOT = macosx;
853855
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
@@ -861,7 +863,7 @@
861863
COMBINE_HIDPI_IMAGES = YES;
862864
INFOPLIST_FILE = DarwinCompatibilityTests/Info.plist;
863865
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
864-
MACOSX_DEPLOYMENT_TARGET = 10.14;
866+
MACOSX_DEPLOYMENT_TARGET = 10.15;
865867
"OTHER_SWIFT_FLAGS[arch=*]" = "-DDEPLOYMENT_RUNTIME_OBJC -DDARWIN_COMPATIBILITY_TESTS";
866868
PRODUCT_BUNDLE_IDENTIFIER = org.swift.DarwinCompatibilityTests;
867869
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -876,7 +878,7 @@
876878
COMBINE_HIDPI_IMAGES = YES;
877879
INFOPLIST_FILE = DarwinCompatibilityTests/Info.plist;
878880
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
879-
MACOSX_DEPLOYMENT_TARGET = 10.14;
881+
MACOSX_DEPLOYMENT_TARGET = 10.15;
880882
"OTHER_SWIFT_FLAGS[arch=*]" = "-DDEPLOYMENT_RUNTIME_OBJC -DDARWIN_COMPATIBILITY_TESTS";
881883
PRODUCT_BUNDLE_IDENTIFIER = org.swift.DarwinCompatibilityTests;
882884
PRODUCT_NAME = "$(TARGET_NAME)";

DarwinCompatibilityTests.xcodeproj/xcshareddata/xcschemes/xdgTestHelper.xcscheme

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,6 @@
5050
<Test
5151
Identifier = "TestDateComponents/test_hash()">
5252
</Test>
53-
<Test
54-
Identifier = "TestFileHandle">
55-
</Test>
56-
<Test
57-
Identifier = "TestPipe">
58-
</Test>
5953
<Test
6054
Identifier = "TestURLComponents/test_hash()">
6155
</Test>

DarwinCompatibilityTests/DarwinShims.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,27 @@ extension NSCharacterSet {
8383
return self as CharacterSet
8484
}
8585
}
86+
87+
88+
extension FileHandle {
89+
public func offset() throws -> UInt64 {
90+
return self.offsetInFile
91+
}
92+
93+
public func read(upToCount count: Int) throws -> Data? {
94+
guard count > 0 else { return nil }
95+
let data = readData(ofLength: count)
96+
if data.count == 0 { return nil }
97+
return data
98+
}
99+
100+
public func readToEnd() throws -> Data? {
101+
try read(upToCount: Int.max)
102+
}
103+
104+
public func write<T: DataProtocol>(contentsOf data: T) throws {
105+
if let d = data as? Data {
106+
self.write(d)
107+
}
108+
}
109+
}

0 commit comments

Comments
 (0)