Skip to content

Commit 2531be1

Browse files
committed
Move currentSystemDefault() implementation to platform
There's a problem with declaring TZIDVar opaque type as expect and actualizing it with a typealias to another typealias.
1 parent 3e21cc3 commit 2531be1

File tree

2 files changed

+14
-13
lines changed

2 files changed

+14
-13
lines changed

core/nativeMain/cinterop_actuals/TimeZoneNative.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,21 @@
44
*/
55
package kotlinx.datetime
66

7+
import kotlinx.cinterop.*
8+
import platform.posix.free
9+
10+
internal actual fun getCurrentSystemDefaultTimeZone(): TimeZone = memScoped {
11+
val tzid = alloc<kotlinx.datetime.internal.TZIDVar>()
12+
val string = kotlinx.datetime.internal.get_system_timezone(tzid.ptr)
13+
?: throw RuntimeException("Failed to get the system timezone.")
14+
val kotlinString = string.toKString()
15+
free(string)
16+
TimeZone(tzid.value, kotlinString)
17+
}
18+
719
internal actual fun available_zone_ids(): kotlinx.cinterop.CPointer<kotlinx.cinterop.CPointerVar<kotlinx.cinterop.ByteVar>>? =
820
kotlinx.datetime.internal.available_zone_ids()
921

10-
internal actual fun get_system_timezone(id: kotlinx.cinterop.CValuesRef<kotlinx.datetime.TZIDVar /* = kotlinx.cinterop.ULongVarOf<kotlin.ULong> */>?): kotlinx.cinterop.CPointer<kotlinx.cinterop.ByteVar /* = kotlinx.cinterop.ByteVarOf<kotlin.Byte> */>? =
11-
kotlinx.datetime.internal.get_system_timezone(id)
12-
1322
internal actual fun offset_at_datetime(zone: kotlinx.datetime.TZID /* = kotlin.ULong */, epoch_sec: platform.posix.int64_t /* = kotlin.Long */, offset: kotlinx.cinterop.CValuesRef<kotlinx.cinterop.IntVar /* = kotlinx.cinterop.IntVarOf<kotlin.Int> */>?): kotlin.Int =
1423
kotlinx.datetime.internal.offset_at_datetime(zone, epoch_sec, offset)
1524

core/nativeMain/src/TimeZone.kt

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,11 @@ import kotlinx.cinterop.*
1313
import platform.posix.*
1414
import kotlin.native.concurrent.*
1515

16+
internal expect fun getCurrentSystemDefaultTimeZone(): TimeZone
1617

17-
internal typealias TZIDVar = kotlinx.cinterop.ULongVarOf<kotlinx.datetime.TZID>
1818
internal typealias TZID = platform.posix.size_t
1919
internal expect val TZID_INVALID: TZID
2020
internal expect fun available_zone_ids(): kotlinx.cinterop.CPointer<kotlinx.cinterop.CPointerVar<kotlinx.cinterop.ByteVar>>?
21-
internal expect fun get_system_timezone(id: kotlinx.cinterop.CValuesRef<kotlinx.datetime.TZIDVar /* = kotlinx.cinterop.ULongVarOf<kotlin.ULong> */>?): kotlinx.cinterop.CPointer<kotlinx.cinterop.ByteVar /* = kotlinx.cinterop.ByteVarOf<kotlin.Byte> */>?
2221
internal expect fun offset_at_datetime(zone: kotlinx.datetime.TZID /* = kotlin.ULong */, epoch_sec: platform.posix.int64_t /* = kotlin.Long */, offset: kotlinx.cinterop.CValuesRef<kotlinx.cinterop.IntVar /* = kotlinx.cinterop.IntVarOf<kotlin.Int> */>?): kotlin.Int
2322
internal expect fun offset_at_instant(zone: kotlinx.datetime.TZID /* = kotlin.ULong */, epoch_sec: platform.posix.int64_t /* = kotlin.Long */): kotlin.Int
2423
internal expect fun timezone_by_name(zone_name: kotlin.String?): kotlinx.datetime.TZID /* = kotlin.ULong */
@@ -27,14 +26,7 @@ public actual open class TimeZone internal constructor(private val tzid: TZID, a
2726

2827
actual companion object {
2928

30-
actual fun currentSystemDefault(): TimeZone = memScoped {
31-
val tzid = alloc<TZIDVar>()
32-
val string = get_system_timezone(tzid.ptr)
33-
?: throw RuntimeException("Failed to get the system timezone.")
34-
val kotlinString = string.toKString()
35-
free(string)
36-
TimeZone(tzid.value, kotlinString)
37-
}
29+
actual fun currentSystemDefault(): TimeZone = getCurrentSystemDefaultTimeZone()
3830

3931
actual val UTC: TimeZone = ZoneOffset.UTC
4032

0 commit comments

Comments
 (0)