diff --git a/src/Core/PS4/HLE/LibKernel.cpp b/src/Core/PS4/HLE/LibKernel.cpp index 81252174..20755cef 100644 --- a/src/Core/PS4/HLE/LibKernel.cpp +++ b/src/Core/PS4/HLE/LibKernel.cpp @@ -48,6 +48,7 @@ void LibKernel_Register(SymbolsResolver* sym) { LIB_FUNCTION("-2IRUCO--PM", "libkernel", 1, "libkernel", 1, 1, sceKernelReadTsc); // fs LIB_FUNCTION("1G3lF1Gg1k8", "libkernel", 1, "libkernel", 1, 1, Emulator::HLE::Libraries::LibKernel::FileSystem::sceKernelOpen); + LIB_FUNCTION("UK2Tl2DWUns", "libkernel", 1, "libkernel", 1, 1, Emulator::HLE::Libraries::LibKernel::FileSystem::sceKernelClose); LIB_FUNCTION("wuCroIGjt2g", "libScePosix", 1, "libkernel", 1, 1, Emulator::HLE::Libraries::LibKernel::FileSystem::POSIX::open); } diff --git a/src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.cpp b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.cpp index 2154ad59..a1de8fad 100644 --- a/src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.cpp +++ b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.cpp @@ -40,4 +40,12 @@ int PS4_SYSV_ABI sceKernelOpen(const char* path, int flags, u16 mode) { return handle; } +int PS4_SYSV_ABI sceKernelClose(int d) { + LOG_INFO_IF(log_file_fs, "sceKernelClose descriptor = {}\n", d); + auto* h = singleton::instance(); + Emulator::Host::Fs::File file = h->getFile(d); + file.valid = false; + h->freeHandle(d); + return SCE_OK; +} } // namespace Emulator::HLE::Libraries::LibKernel::FileSystem \ No newline at end of file diff --git a/src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.h b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.h index 1651a281..06680b06 100644 --- a/src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.h +++ b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.h @@ -7,5 +7,6 @@ constexpr u32 SCE_KERNEL_O_CREAT = 0x0200; constexpr u32 SCE_KERNEL_O_DIRECTORY = 0x00020000; int PS4_SYSV_ABI sceKernelOpen(const char *path, int flags, /* SceKernelMode*/ u16 mode); +int PS4_SYSV_ABI sceKernelClose(int d); } // namespace Emulator::HLE::Libraries::LibKernel::FileSystem \ No newline at end of file diff --git a/src/Emulator/HLE/Libraries/LibKernel/FileSystem/posix_file_system.cpp b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/posix_file_system.cpp index caa6fb43..b4b83ad5 100644 --- a/src/Emulator/HLE/Libraries/LibKernel/FileSystem/posix_file_system.cpp +++ b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/posix_file_system.cpp @@ -1,11 +1,14 @@ #include "posix_file_system.h" #include - +#include #include "file_system.h" namespace Emulator::HLE::Libraries::LibKernel::FileSystem::POSIX { +constexpr bool log_file_pfs = true; // disable it to disable logging + int PS4_SYSV_ABI open(const char* path, int flags, /* SceKernelMode*/ u16 mode) { + LOG_INFO_IF(log_file_pfs, "posix open redirect to sceKernelOpen\n"); int result = sceKernelOpen(path, flags, mode); if (result < 0) { BREAKPOINT(); // posix calls different only for their return values