From bfbe1d49088d8dca54bf05fb1521e2dcf8b94803 Mon Sep 17 00:00:00 2001 From: Stephen Miller Date: Sat, 14 Jun 2025 08:56:23 -0500 Subject: [PATCH] Improved "hack" --- src/core/libraries/kernel/file_system.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/core/libraries/kernel/file_system.cpp b/src/core/libraries/kernel/file_system.cpp index dbbdd71db..39f9f82b7 100644 --- a/src/core/libraries/kernel/file_system.cpp +++ b/src/core/libraries/kernel/file_system.cpp @@ -293,13 +293,17 @@ s64 PS4_SYSV_ABI write(s32 fd, const void* buf, size_t nbytes) { } return result; } - auto file_size_before = file->f.GetSize(); - auto written_bytes = file->f.WriteRaw(buf, nbytes); - auto file_size = file->f.GetSize(); - if (file_size != file_size_before + written_bytes) { - file->f.SetSize(written_bytes); + + // Due to a quirk with std::fwrite + // we need to validate the returned bytes, and make sure the file size is correct. + auto expected_file_size = file->f.GetSize(); + auto bytes_written = file->f.WriteRaw(buf, nbytes); + expected_file_size += bytes_written; + auto actual_file_size = file->f.GetSize(); + if (expected_file_size != actual_file_size) { + file->f.SetSize(expected_file_size); } - return written_bytes; + return bytes_written; } s64 PS4_SYSV_ABI posix_write(s32 fd, const void* buf, size_t nbytes) {