From c4e86cfd2b21958891e8fc7818517e589a8f6d53 Mon Sep 17 00:00:00 2001 From: Adrian <78108584+AdrianCassar@users.noreply.github.com> Date: Sun, 29 Jun 2025 13:30:26 +0100 Subject: [PATCH] [XAM] Cleanup XamGetOverlappedResult --- src/xenia/kernel/xam/xam_msg.cc | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/xenia/kernel/xam/xam_msg.cc b/src/xenia/kernel/xam/xam_msg.cc index 68facfb1f..6c2b95106 100644 --- a/src/xenia/kernel/xam/xam_msg.cc +++ b/src/xenia/kernel/xam/xam_msg.cc @@ -115,24 +115,30 @@ DECLARE_XAM_EXPORT2(XMsgCompleteIORequest, kNone, kImplemented, kSketchy); dword_result_t XamGetOverlappedResult_entry( pointer_t overlapped_ptr, lpdword_t length_ptr, dword_t wait) { - uint32_t result; + uint32_t result = X_STATUS_SUCCESS; + if (overlapped_ptr->result != X_ERROR_IO_PENDING) { result = overlapped_ptr->result; - } else if (!overlapped_ptr->event) { - result = X_ERROR_IO_INCOMPLETE; - } else { + } else if (wait && overlapped_ptr->event) { auto ev = kernel_state()->object_table()->LookupObject( overlapped_ptr->event); result = ev->Wait(3, 1, 0, nullptr); - if (XSUCCEEDED(result)) { - result = overlapped_ptr->result; - } else { - result = xboxkrnl::xeRtlNtStatusToDosError(result); - } + } else { + result = X_STATUS_TIMEOUT; } - if (XSUCCEEDED(result) && length_ptr) { + + if (result == X_STATUS_TIMEOUT) { + return X_ERROR_IO_INCOMPLETE; + } + + if (XFAILED(result)) { + return XThread::GetLastError(); + } + + if (length_ptr) { *length_ptr = overlapped_ptr->length; } + return result; } DECLARE_XAM_EXPORT2(XamGetOverlappedResult, kNone, kImplemented, kSketchy);