diff --git a/samples/csvparser/build.gradle b/samples/csvparser/build.gradle index c59195bfa8a..bafbb8b350c 100644 --- a/samples/csvparser/build.gradle +++ b/samples/csvparser/build.gradle @@ -1,11 +1,5 @@ apply plugin: 'konan' -konanInterop { - stdio { } -} - konanArtifacts { - CsvParser { - useInterop 'stdio' - } + CsvParser } \ No newline at end of file diff --git a/samples/csvparser/src/main/c_interop/stdio.def b/samples/csvparser/src/main/c_interop/stdio.def deleted file mode 100644 index 187fdce964c..00000000000 --- a/samples/csvparser/src/main/c_interop/stdio.def +++ /dev/null @@ -1,2 +0,0 @@ -headers = stdio.h stdlib.h string.h -compilerOpts = -D_ANSI_SOURCE diff --git a/samples/csvparser/src/main/kotlin/CsvParser.kt b/samples/csvparser/src/main/kotlin/CsvParser.kt index d3b88bd8e2c..958ea3a01d5 100644 --- a/samples/csvparser/src/main/kotlin/CsvParser.kt +++ b/samples/csvparser/src/main/kotlin/CsvParser.kt @@ -15,7 +15,7 @@ */ import kotlinx.cinterop.* -import stdio.* +import posix.* fun parseLine(line: String, separator: Char) : List { val result = mutableListOf() diff --git a/samples/nonBlockingEchoServer/build.gradle b/samples/nonBlockingEchoServer/build.gradle index 5ff36d84405..c7c2e2bd767 100644 --- a/samples/nonBlockingEchoServer/build.gradle +++ b/samples/nonBlockingEchoServer/build.gradle @@ -1,11 +1,5 @@ apply plugin: 'konan' -konanInterop { - sockets { } -} - konanArtifacts { - EchoServer { - useInterop "sockets" - } + EchoServer } diff --git a/samples/nonBlockingEchoServer/src/main/c_interop/sockets.def b/samples/nonBlockingEchoServer/src/main/c_interop/sockets.def deleted file mode 100644 index 29d04ef2609..00000000000 --- a/samples/nonBlockingEchoServer/src/main/c_interop/sockets.def +++ /dev/null @@ -1,24 +0,0 @@ -headers = sys/socket.h sys/errno.h sys/select.h fcntl.h netdb.h stdio.h string.h unistd.h stdlib.h netinet/in.h -excludeDependentModules.osx = true - ---- - -static int interop_errno() { - return errno; -} - -static int interop_htons(int x) { - return htons(x); -} - -static void interop_FD_ZERO(fd_set *set) { - FD_ZERO(set); -} - -static void interop_FD_SET(int bit, fd_set *set) { - FD_SET(bit, set); -} - -static int interop_FD_ISSET(int bit, fd_set *set) { - return FD_ISSET(bit, set); -} diff --git a/samples/nonBlockingEchoServer/src/main/kotlin/EchoServer.kt b/samples/nonBlockingEchoServer/src/main/kotlin/EchoServer.kt index 72124b66893..7606a1b2eea 100644 --- a/samples/nonBlockingEchoServer/src/main/kotlin/EchoServer.kt +++ b/samples/nonBlockingEchoServer/src/main/kotlin/EchoServer.kt @@ -15,7 +15,7 @@ */ import kotlinx.cinterop.* -import sockets.* +import posix.* import kotlin.coroutines.experimental.* import kotlin.coroutines.experimental.intrinsics.* @@ -37,8 +37,8 @@ fun main(args: Array) { with(serverAddr) { memset(this.ptr, 0, sockaddr_in.size) sin_family = AF_INET.narrow() - sin_addr.s_addr = htons(0).toInt() - sin_port = htons(port) + sin_addr.s_addr = posix_htons(0).toInt() + sin_port = posix_htons(port) } bind(listenFd, serverAddr.ptr.reinterpret(), sockaddr_in.size.toInt()) @@ -93,7 +93,7 @@ class Client(val clientFd: Int, val waitingList: MutableMap) { val length = read(clientFd, data, dataLength) if (length >= 0) return length - if (errno != EWOULDBLOCK) + if (posix_errno() != EWOULDBLOCK) throw IOException(getUnixError()) // Save continuation and suspend. return suspendCoroutineOrReturn { continuation -> @@ -106,7 +106,7 @@ class Client(val clientFd: Int, val waitingList: MutableMap) { val written = write(clientFd, data, length) if (written >= 0) return - if (errno != EWOULDBLOCK) + if (posix_errno() != EWOULDBLOCK) throw IOException(getUnixError()) // Save continuation and suspend. return suspendCoroutineOrReturn { continuation -> @@ -130,23 +130,25 @@ fun acceptClientsAndRun(serverFd: Int, block: suspend Client.() -> Unit) { val errorfds = alloc() var maxfd = serverFd while (true) { - FD_ZERO(readfds) - FD_ZERO(writefds) - FD_ZERO(errorfds) + posix_FD_ZERO(readfds.ptr) + posix_FD_ZERO(writefds.ptr) + posix_FD_ZERO(errorfds.ptr) for ((socketFd, watingFor) in waitingList) { when (watingFor) { - is WaitingFor.Accept -> FD_SET(socketFd, readfds) - is WaitingFor.Read -> FD_SET(socketFd, readfds) - is WaitingFor.Write -> FD_SET(socketFd, writefds) + is WaitingFor.Accept -> posix_FD_SET(socketFd, readfds.ptr) + is WaitingFor.Read -> posix_FD_SET(socketFd, readfds.ptr) + is WaitingFor.Write -> posix_FD_SET(socketFd, writefds.ptr) } - FD_SET(socketFd, errorfds) + posix_FD_SET(socketFd, errorfds.ptr) } pselect(maxfd + 1, readfds.ptr, writefds.ptr, errorfds.ptr, null, null) .ensureUnixCallResult { it >= 0 } loop@for (socketFd in 0..maxfd) { val waitingFor = waitingList[socketFd] - val errorOccured = FD_ISSET(socketFd, errorfds) - if (FD_ISSET(socketFd, readfds) || FD_ISSET(socketFd, writefds) || errorOccured) { + val errorOccured = posix_FD_ISSET(socketFd, errorfds.ptr) != 0 + if (posix_FD_ISSET(socketFd, readfds.ptr) != 0 + || posix_FD_ISSET(socketFd, writefds.ptr) != 0 + || errorOccured) { when (waitingFor) { is WaitingFor.Accept -> { if (errorOccured) @@ -155,7 +157,7 @@ fun acceptClientsAndRun(serverFd: Int, block: suspend Client.() -> Unit) { // Accept new client. val clientFd = accept(serverFd, null, null) if (clientFd < 0) { - if (errno != EWOULDBLOCK) + if (posix_errno() != EWOULDBLOCK) throw Error(getUnixError()) break@loop } @@ -196,18 +198,7 @@ fun acceptClientsAndRun(serverFd: Int, block: suspend Client.() -> Unit) { class IOException(message: String): RuntimeException(message) -val errno: Int - get() = interop_errno() - -fun FD_ZERO(set: fd_set): Unit = interop_FD_ZERO(set.ptr) - -fun FD_SET(bit: Int, set: fd_set): Unit = interop_FD_SET(bit, set.ptr) - -fun FD_ISSET(bit: Int, set: fd_set) = interop_FD_ISSET(bit, set.ptr) != 0 - -fun htons(value: Short) = interop_htons(value.toInt()).toShort() - -fun getUnixError() = strerror(errno)!!.toKString() +fun getUnixError() = strerror(posix_errno())!!.toKString() inline fun Int.ensureUnixCallResult(predicate: (Int) -> Boolean): Int { if (!predicate(this)) { diff --git a/samples/socket/build.gradle b/samples/socket/build.gradle index 5ff36d84405..c7c2e2bd767 100644 --- a/samples/socket/build.gradle +++ b/samples/socket/build.gradle @@ -1,11 +1,5 @@ apply plugin: 'konan' -konanInterop { - sockets { } -} - konanArtifacts { - EchoServer { - useInterop "sockets" - } + EchoServer } diff --git a/samples/socket/src/main/kotlin/EchoServer.kt b/samples/socket/src/main/kotlin/EchoServer.kt index 2f2f1bda2ef..7f378e4375f 100644 --- a/samples/socket/src/main/kotlin/EchoServer.kt +++ b/samples/socket/src/main/kotlin/EchoServer.kt @@ -15,7 +15,7 @@ */ import kotlinx.cinterop.* -import sockets.* +import posix.* fun main(args: Array) { if (args.size < 1) { @@ -37,8 +37,8 @@ fun main(args: Array) { with(serverAddr) { memset(this.ptr, 0, sockaddr_in.size) sin_family = AF_INET.narrow() - sin_addr.s_addr = htons(0).toInt() - sin_port = htons(port) + sin_addr.s_addr = posix_htons(0).toInt() + sin_port = posix_htons(port) } bind(listenFd, serverAddr.ptr.reinterpret(), sockaddr_in.size.toInt()) @@ -64,21 +64,16 @@ fun main(args: Array) { } } -val errno: Int - get() = interop_errno() - -fun htons(value: Short) = interop_htons(value.toInt()).toShort() - inline fun Int.ensureUnixCallResult(predicate: (Int) -> Boolean): Int { if (!predicate(this)) { - throw Error(strerror(errno)!!.toKString()) + throw Error(strerror(posix_errno())!!.toKString()) } return this } inline fun Long.ensureUnixCallResult(predicate: (Long) -> Boolean): Long { if (!predicate(this)) { - throw Error(strerror(errno)!!.toKString()) + throw Error(strerror(posix_errno())!!.toKString()) } return this }