Convert munmap operation to JNI

This commit is contained in:
tarsin committed 2023-02-02 20:15:05 +08:00
1 parent f5bd097584
commit 6efe8922b3
2 files changed
+12 -9

No files matched your search

@@ -15,13 +15,23 @@ import platform.posix.PROT_READ
import platform.posix.PROT_WRITE
import platform.posix.errno
import platform.posix.mmap
import platform.posix.strerror
import platform.posix.munmap
@OptIn(UnsafeNumber::class)
@Suppress("UNUSED_PARAMETER")
@CName("Java_com_hippo_Native_mapFd")
fun mapFd(env: CPointer<JNIEnvVar>, clazz: jclass, fd: jint, capability: jlong): jobject {
val result = mmap(null, capability.tosize_t(), PROT_READ or PROT_WRITE, MAP_PRIVATE, fd, 0)
result ?: Warn("mmap call with fd:${fd} capability:${capability} failed!, error:${strerror(errno)}")
result ?: Warn("mmap call with fd:${fd} capability:${capability} failed!, errno:${errno}")
return result?.let { env.newDirectByteBuffer(result, capability) } ?: interpretCPointer(nativeNullPtr)!!
}
@Suppress("UNUSED_PARAMETER")
@OptIn(UnsafeNumber::class)
@CName("Java_com_hippo_Native_unmapDirectByteBuffer")
fun unmapFd(env: CPointer<JNIEnvVar>, clazz: jclass, buffer: jobject) {
val addr = env.getDirectBufferAddress(buffer)
val size = env.getDirectBufferCapacity(buffer)
val result = munmap(addr, size.tosize_t())
if (result != 0) Warn("mmap call with addr:${addr} size:${size} failed!, errno:${errno}")
}