Skip to content

Commit 2e8f443

Browse files
authored
Merge pull request swiftlang#77 from swiftwasm/master
[pull] swiftwasm from master
2 parents 23f2a7c + 8d9a1bf commit 2e8f443

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

CoreFoundation/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
3131
if(NOT CMAKE_SYSTEM_NAME STREQUAL WASI)
3232
find_package(LibXml2 REQUIRED)
3333
find_package(CURL CONFIG)
34-
if(NOT CURL_FOUND)
34+
if(CURL_FOUND)
35+
set(CURL_VERSION_STRING ${CURL_VERSION})
36+
else()
3537
find_package(CURL REQUIRED)
3638
endif()
3739
else()

Sources/Foundation/Host.swift

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,32 @@ import CoreFoundation
2424
private func getnameinfo(_ addr: UnsafePointer<sockaddr>?, _ addrlen: socklen_t, _ host: UnsafeMutablePointer<Int8>?, _ hostlen: socklen_t, _ serv: UnsafeMutablePointer<Int8>?, _ servlen: socklen_t, _ flags: Int32) -> Int32 {
2525
return Glibc.getnameinfo(addr, addrlen, host, Int(hostlen), serv, Int(servlen), flags)
2626
}
27+
28+
// getifaddrs and freeifaddrs are not available in Android 6.0 or earlier, so call these functions dynamically.
29+
// This only happens during the initial lookup of the addresses and then the results are cached and _resolved is marked true.
30+
// If this API changes so these functions are called more frequently, it might be beneficial to cache the function pointers.
31+
32+
private typealias GetIfAddrsFunc = @convention(c) (UnsafeMutablePointer<UnsafeMutablePointer<ifaddrs>?>) -> Int32
33+
private func getifaddrs(_ ifap: UnsafeMutablePointer<UnsafeMutablePointer<ifaddrs>?>) -> Int32 {
34+
var result: Int32 = -1
35+
if let handle = dlopen("libc.so", RTLD_NOLOAD) {
36+
if let entry = dlsym(handle, "getifaddrs") {
37+
result = unsafeBitCast(entry, to: GetIfAddrsFunc.self)(ifap)
38+
}
39+
dlclose(handle)
40+
}
41+
return result
42+
}
43+
44+
private typealias FreeIfAddrsFunc = @convention(c) (UnsafeMutablePointer<ifaddrs>?) -> Void
45+
private func freeifaddrs(_ ifa: UnsafeMutablePointer<ifaddrs>?) {
46+
if let handle = dlopen("libc.so", RTLD_NOLOAD) {
47+
if let entry = dlsym(handle, "freeifaddrs") {
48+
unsafeBitCast(entry, to: FreeIfAddrsFunc.self)(ifa)
49+
}
50+
dlclose(handle)
51+
}
52+
}
2753
#endif
2854

2955
open class Host: NSObject {

Sources/FoundationNetworking/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
22
find_package(CURL CONFIG)
3-
if(NOT CURL_FOUND)
3+
if(CURL_FOUND)
4+
set(CURL_VERSION_STRING ${CURL_VERSION})
5+
else()
46
find_package(CURL REQUIRED)
57
endif()
68
endif()

0 commit comments

Comments
 (0)