From 86d059ddd190ea81f870e9a9f9194665fa874eb7 Mon Sep 17 00:00:00 2001 From: Ivan Chikish Date: Sat, 15 Jul 2023 06:03:55 +0300 Subject: [PATCH] [orbis-kernel] Fix sys_gettimeofday Disable sys_utc_to_localtime and sys_localtime_to_utc for now. Libkernel will fallback to sys_gettimeofday. --- orbis-kernel/include/orbis/time.hpp | 2 +- orbis-kernel/src/sys/sys_sce.cpp | 8 ++++++++ orbis-kernel/src/sys/sys_time.cpp | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/orbis-kernel/include/orbis/time.hpp b/orbis-kernel/include/orbis/time.hpp index e73555e01..4f030873e 100644 --- a/orbis-kernel/include/orbis/time.hpp +++ b/orbis-kernel/include/orbis/time.hpp @@ -12,7 +12,7 @@ struct timeval { int64_t tv_usec; }; struct timezone { - sint tz_minuteswest; + sint tz_mineast; sint tz_dsttime; }; struct timesec { diff --git a/orbis-kernel/src/sys/sys_sce.cpp b/orbis-kernel/src/sys/sys_sce.cpp index 11bc10ead..2fd747032 100644 --- a/orbis-kernel/src/sys/sys_sce.cpp +++ b/orbis-kernel/src/sys/sys_sce.cpp @@ -857,6 +857,10 @@ orbis::SysResult orbis::sys_utc_to_localtime(Thread *thread, int64_t time, int64_t *localtime, orbis::timesec *_sec, int *_dst_sec) { + // Disabled for now + thread->retval[0] = (int)ErrorCode::RANGE; + return {}; + ORBIS_LOG_TRACE(__FUNCTION__, time, localtime, _sec, _dst_sec); struct ::tm tp; auto result = ::mktime(::localtime_r(&time, &tp)); @@ -870,6 +874,10 @@ orbis::SysResult orbis::sys_localtime_to_utc(Thread *thread, int64_t time, uint unk, int64_t *ptime, orbis::timesec *_sec, int *_dst_sec) { + // Disabled for now + thread->retval[0] = (int)ErrorCode::RANGE; + return {}; + ORBIS_LOG_TRACE(__FUNCTION__, time, unk, ptime, _sec, _dst_sec); struct ::tm tp; ::time_t timez = 0; diff --git a/orbis-kernel/src/sys/sys_time.cpp b/orbis-kernel/src/sys/sys_time.cpp index c07ec85ab..f8f35292c 100644 --- a/orbis-kernel/src/sys/sys_time.cpp +++ b/orbis-kernel/src/sys/sys_time.cpp @@ -130,8 +130,8 @@ orbis::SysResult orbis::sys_gettimeofday(Thread *thread, ptr tp, if (localtime_r(&tv.tv_sec, &tp) != &tp) std::abort(); orbis::timezone value; - value.tz_dsttime = tp.tm_isdst; - value.tz_minuteswest = -tp.tm_gmtoff / 60; + value.tz_dsttime = 0; // TODO + value.tz_mineast = tp.tm_gmtoff / 60; if (auto e = uwrite(tzp, value); e != ErrorCode{}) return e; }