From d9d7e3b9c3c676908015396d3ea8b5fb5ee29a03 Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Thu, 4 Sep 2025 23:01:08 +0300 Subject: [PATCH] sizeof and subpackages for platform-specific code --- .../kotlin_native_interop_stdlib_0/sizeof.kt | 23 +++++++++++++++++++ .../{ => posix}/PosixApiException.kt | 9 ++++---- .../{ => windows}/WindowsApiException.kt | 3 ++- 3 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/sizeof.kt rename src/posixMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/{ => posix}/PosixApiException.kt (92%) rename src/windowsMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/{ => windows}/WindowsApiException.kt (97%) diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/sizeof.kt b/src/commonMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/sizeof.kt new file mode 100644 index 0000000..9243eaa --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/sizeof.kt @@ -0,0 +1,23 @@ + +package ru.landgrafhomyak.utility.kotlin_native_interop_stdlib_0 + +import kotlinx.cinterop.CVariable +import kotlinx.cinterop.ExperimentalForeignApi +import kotlinx.cinterop.sizeOf + + +/** + * Returns size of a C type in bytes, but as [unsigned long long][ULong]. + * @see sizeOf + * @see sizeOfUI + */ +@ExperimentalForeignApi +public inline fun sizeOfUL(): ULong = sizeOf().toULong() + +/** + * Returns size of a C type in bytes, but as [unsigned long][UInt]. + * @see sizeOf + * @see sizeOfUL + */ +@ExperimentalForeignApi +public inline fun sizeOfUI(): UInt = sizeOf().toUInt() diff --git a/src/posixMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/PosixApiException.kt b/src/posixMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/posix/PosixApiException.kt similarity index 92% rename from src/posixMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/PosixApiException.kt rename to src/posixMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/posix/PosixApiException.kt index 3c55e6a..85fcfd7 100644 --- a/src/posixMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/PosixApiException.kt +++ b/src/posixMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/posix/PosixApiException.kt @@ -1,9 +1,10 @@ -package ru.landgrafhomyak.utility.kotlin_native_interop_stdlib_0 +package ru.landgrafhomyak.utility.kotlin_native_interop_stdlib_0.posix import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.cinterop.toKStringFromUtf8 +import platform.posix.errno import platform.posix.strerror -import platform.posix.errno as getLastErrno +import ru.landgrafhomyak.utility.kotlin_native_interop_stdlib_0.OsException public class PosixApiException : OsException { private val errno: Int @@ -41,7 +42,7 @@ public class PosixApiException : OsException { throw this.formatFromWindowsErrCode(code) } - public fun formatFromLastWindowsErr(): PosixApiException = this.formatFromWindowsErrCode(getLastErrno) + public fun formatFromLastWindowsErr(): PosixApiException = this.formatFromWindowsErrCode(errno) public fun formatFromWindowsErrCode(code: Int): PosixApiException { var err = PosixApiException(errno = code, nativeMessage = null, customMessage = "[errno=${code}]") @@ -60,7 +61,7 @@ public class PosixApiException : OsException { if (raw != null) { return raw.toKStringFromUtf8() } else { - val strerrErrno = getLastErrno + val strerrErrno = errno throw PosixApiException(errno = strerrErrno, nativeMessage = null, "[errno=${strerrErrno}]") } } diff --git a/src/windowsMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/WindowsApiException.kt b/src/windowsMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/windows/WindowsApiException.kt similarity index 97% rename from src/windowsMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/WindowsApiException.kt rename to src/windowsMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/windows/WindowsApiException.kt index 9b8ad90..106a22d 100644 --- a/src/windowsMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/WindowsApiException.kt +++ b/src/windowsMain/kotlin/ru/landgrafhomyak/utility/kotlin_native_interop_stdlib_0/windows/WindowsApiException.kt @@ -1,4 +1,4 @@ -package ru.landgrafhomyak.utility.kotlin_native_interop_stdlib_0 +package ru.landgrafhomyak.utility.kotlin_native_interop_stdlib_0.windows import kotlinx.cinterop.ByteVar import kotlinx.cinterop.CPointerVar @@ -16,6 +16,7 @@ import platform.windows.FormatMessageA import platform.windows.GetLastError import platform.windows.LocalFree import ru.landgrafhomyak.utility.highlevel_try_finally.safeAutoClose1 +import ru.landgrafhomyak.utility.kotlin_native_interop_stdlib_0.OsException public class WindowsApiException : OsException { private val errno: UInt