diff --git a/native/src/nativeMain/kotlin/moe/tarsin/ehviewer/LogUtils.kt b/native/src/nativeMain/kotlin/moe/tarsin/ehviewer/LogUtils.kt new file mode 100644 index 000000000..fbc3549dd --- /dev/null +++ b/native/src/nativeMain/kotlin/moe/tarsin/ehviewer/LogUtils.kt @@ -0,0 +1,10 @@ +package moe.tarsin.ehviewer + +import platform.android.ANDROID_LOG_WARN +import platform.android.__android_log_print + +private val KNI_NATIVE_TAG = "KNI" + +fun Warn(message: String) { + __android_log_print(ANDROID_LOG_WARN.toInt(), KNI_NATIVE_TAG, "%s", message) +} diff --git a/native/src/nativeMain/kotlin/moe/tarsin/ehviewer/mmap.kt b/native/src/nativeMain/kotlin/moe/tarsin/ehviewer/mmap.kt index 8b0231245..855566b03 100644 --- a/native/src/nativeMain/kotlin/moe/tarsin/ehviewer/mmap.kt +++ b/native/src/nativeMain/kotlin/moe/tarsin/ehviewer/mmap.kt @@ -2,6 +2,8 @@ package moe.tarsin.ehviewer import kotlinx.cinterop.CPointer import kotlinx.cinterop.UnsafeNumber +import kotlinx.cinterop.interpretCPointer +import kotlinx.cinterop.nativeNullPtr import kotlinx.cinterop.value import platform.android.JNIEnvVar import platform.android.jclass @@ -11,12 +13,15 @@ import platform.android.jobject import platform.posix.MAP_PRIVATE import platform.posix.PROT_READ import platform.posix.PROT_WRITE +import platform.posix.errno import platform.posix.mmap +import platform.posix.strerror @OptIn(UnsafeNumber::class) @Suppress("UNUSED_PARAMETER") @CName("Java_com_hippo_Native_mapFd") fun mapFd(env: CPointer, clazz: jclass, fd: jint, capability: jlong): jobject { val result = mmap(null, capability.tosize_t(), PROT_READ or PROT_WRITE, MAP_PRIVATE, fd, 0) - return env.newDirectByteBuffer(result!!, capability) + result ?: Warn("mmap call with fd:${fd} capability:${capability} failed!, error:${strerror(errno)}") + return result?.let { env.newDirectByteBuffer(result, capability) } ?: interpretCPointer(nativeNullPtr)!! }