From a8bd6f84f79e82ab9830c777376a38bd138660da Mon Sep 17 00:00:00 2001 From: Exzap <13877693+Exzap@users.noreply.github.com> Date: Mon, 4 May 2026 03:09:29 +0200 Subject: [PATCH] coreinit: Implement OSDynLoad_IsModuleLoaded --- .../OS/libs/coreinit/coreinit_DynLoad.cpp | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Cafe/OS/libs/coreinit/coreinit_DynLoad.cpp b/src/Cafe/OS/libs/coreinit/coreinit_DynLoad.cpp index 546501b6..5aa1fef5 100644 --- a/src/Cafe/OS/libs/coreinit/coreinit_DynLoad.cpp +++ b/src/Cafe/OS/libs/coreinit/coreinit_DynLoad.cpp @@ -59,7 +59,7 @@ namespace coreinit PPCCoreCallback(_osDynLoadFuncFree, _mem); } - uint32 OSDynLoad_Acquire(const char* libName, uint32be* moduleHandleOut) + uint32 OSDynLoad_AcquireInternal(const char* libName, uint32be* moduleHandleOut, bool checkOnly) { // truncate path sint32 fileNameStartIndex = 0; @@ -72,7 +72,7 @@ namespace coreinit break; } } - // truncate file extension + // truncate file extension char tempLibName[512]; strcpy(tempLibName, libName + fileNameStartIndex); tempLen = (sint32)strlen(tempLibName); @@ -88,6 +88,11 @@ namespace coreinit uint32 rplHandle = RPLLoader_GetHandleByModuleName(libName); if (rplHandle == RPL_INVALID_HANDLE && !RPLLoader_HasDependency(libName)) { + if (checkOnly) + { + *moduleHandleOut = 0; + return 0; + } RPLLoader_AddDependency(libName); RPLLoader_UpdateDependencies(); RPLLoader_Link(); @@ -106,6 +111,11 @@ namespace coreinit return 0; } + uint32 OSDynLoad_Acquire(const char* libName, uint32be* moduleHandleOut) + { + return OSDynLoad_AcquireInternal(libName, moduleHandleOut, false); + } + void OSDynLoad_Release(uint32 moduleHandle) { if (moduleHandle == RPL_INVALID_HANDLE) @@ -114,6 +124,11 @@ namespace coreinit RPLLoader_UpdateDependencies(); } + uint32 OSDynLoad_IsModuleLoaded(const char* libName, uint32be* moduleHandleOut) + { + return OSDynLoad_AcquireInternal(libName, moduleHandleOut, true); + } + uint32 OSDynLoad_FindExport(uint32 moduleHandle, uint32 isData, const char* exportName, betype* addrOut) { if (moduleHandle == 0xFFFFFFFF) @@ -140,6 +155,7 @@ namespace coreinit cafeExportRegister("coreinit", OSDynLoad_Acquire, LogType::Placeholder); cafeExportRegister("coreinit", OSDynLoad_Release, LogType::Placeholder); + cafeExportRegister("coreinit", OSDynLoad_IsModuleLoaded, LogType::Placeholder); cafeExportRegister("coreinit", OSDynLoad_FindExport, LogType::Placeholder); } } \ No newline at end of file