From d7fe62badf5ee50582e3603184d473c5cd2fc139 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Wed, 5 Mar 2025 14:38:04 +0100 Subject: [PATCH] Fix odd vtimer error code discrepancy --- Core/HLE/sceKernel.h | 6 +++--- Core/HLE/sceKernelVTimer.cpp | 10 ++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Core/HLE/sceKernel.h b/Core/HLE/sceKernel.h index d9d323bc04..8a21b62346 100644 --- a/Core/HLE/sceKernel.h +++ b/Core/HLE/sceKernel.h @@ -181,16 +181,16 @@ public: WARN_LOG(Log::sceKernel, "Kernel: Bad %s handle %d (%08x)", T::GetStaticTypeName(), handle, handle); } outError = T::GetMissingErrorCode(); - return 0; + return nullptr; } else { // Previously we had a dynamic_cast here, but since RTTI was disabled traditionally, // it just acted as a static cast and everything worked. This means that we will never // see the Wrong type object error below, but we'll just have to live with that danger. - T* t = static_cast(pool[handle - handleOffset]); + T *t = static_cast(pool[handle - handleOffset]); if (t == nullptr || t->GetIDType() != T::GetStaticIDType()) { WARN_LOG(Log::sceKernel, "Kernel: Wrong object type for %d (%08x), was %s, should have been %s", handle, handle, t ? t->GetTypeName() : "null", T::GetStaticTypeName()); outError = T::GetMissingErrorCode(); - return 0; + return nullptr; } outError = SCE_KERNEL_ERROR_OK; return t; diff --git a/Core/HLE/sceKernelVTimer.cpp b/Core/HLE/sceKernelVTimer.cpp index d6b1ee131c..21c2499a74 100644 --- a/Core/HLE/sceKernelVTimer.cpp +++ b/Core/HLE/sceKernelVTimer.cpp @@ -270,7 +270,7 @@ u64 sceKernelGetVTimerBaseWide(SceUID uid) { u32 error; VTimer *vt = kernelObjects.Get(uid, error); if (!vt) { - return hleLogError(Log::sceKernel, error, "bad timer ID"); + return hleLogError(Log::sceKernel, -1, "bad timer ID"); } return hleLogDebug(Log::sceKernel, vt->nvt.base); @@ -294,7 +294,8 @@ u64 sceKernelGetVTimerTimeWide(SceUID uid) { u32 error; VTimer *vt = kernelObjects.Get(uid, error); if (!vt) { - return hleLogError(Log::sceKernel, error, "bad timer ID"); + // Strange error code! But, it matches tests. + return hleLogError(Log::sceKernel, -1, "bad timer ID. error=%08x", error); } u64 time = __getVTimerCurrentTime(vt); @@ -333,7 +334,8 @@ u64 sceKernelSetVTimerTimeWide(SceUID uid, u64 timeClock) { u32 error; VTimer *vt = kernelObjects.Get(uid, error); if (!vt) { - return hleLogError(Log::sceKernel, error, "bad timer ID"); + // Strange error code! But, it matches tests. + return hleLogError(Log::sceKernel, -1, "bad timer ID. error=%08x", error); } return hleLogDebug(Log::sceKernel, __KernelSetVTimer(vt, timeClock)); @@ -359,7 +361,7 @@ u32 sceKernelStartVTimer(SceUID uid) { return hleLogError(Log::sceKernel, error, "bad timer ID"); } - if (vt->nvt.active != 0) { + if (vt->nvt.active) { return hleLogDebug(Log::sceKernel, 1); }