From 9b0e6c31ca94873ed24743f51a7fb0db5581ac65 Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Sun, 21 Apr 2024 23:07:11 +0300 Subject: [PATCH] rewrote sceKernelLseek , fixed bug in clock_gettime --- src/core/libraries/kernel/file_system.cpp | 13 +++++++------ src/core/libraries/kernel/thread_management.cpp | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/core/libraries/kernel/file_system.cpp b/src/core/libraries/kernel/file_system.cpp index 2f1e8ef21..c24706861 100644 --- a/src/core/libraries/kernel/file_system.cpp +++ b/src/core/libraries/kernel/file_system.cpp @@ -73,18 +73,19 @@ s64 PS4_SYSV_ABI sceKernelLseek(int d, s64 offset, int whence) { auto* file = h->GetFile(d); file->m_mutex.lock(); + Common::FS::SeekOrigin origin; + if (whence == 0) { + origin = Common::FS::SeekOrigin::SetOrigin; + } if (whence == 1) { - offset = static_cast(file->f.Tell()) + offset; - whence = 0; + origin = Common::FS::SeekOrigin::CurrentPosition; } - if (whence == 2) { - offset = static_cast(file->f.GetSize()) + offset; - whence = 0; + origin = Common::FS::SeekOrigin::End; } - file->f.Seek(offset); + file->f.Seek(offset, origin); auto pos = static_cast(file->f.Tell()); file->m_mutex.unlock(); diff --git a/src/core/libraries/kernel/thread_management.cpp b/src/core/libraries/kernel/thread_management.cpp index e632f190e..5328de52a 100644 --- a/src/core/libraries/kernel/thread_management.cpp +++ b/src/core/libraries/kernel/thread_management.cpp @@ -924,7 +924,7 @@ void pthreadSymbolsRegister(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("mkx2fVhNMsg", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_cond_broadcast); LIB_FUNCTION("QBi7HCK03hw", "libkernel", 1, "libkernel", 1, 1, sceKernelClockGettime); - LIB_FUNCTION("lLMT9vJAck0", "libkernel", 1, "libkernel", 1, 1, clock_gettime); + LIB_FUNCTION("lLMT9vJAck0", "libScePosix", 1, "libkernel", 1, 1, clock_gettime); LIB_FUNCTION("yS8U2TGCe1A", "libScePosix", 1, "libkernel", 1, 1, nanosleep); // openorbis weird functions