#include "il2cpp-config.h" #include "MetadataLoader.h" #include "os/File.h" #include "os/Mutex.h" #include "utils/MemoryMappedFile.h" #include "utils/PathUtils.h" #include "utils/Runtime.h" #include "utils/Logging.h" void* il2cpp::vm::MetadataLoader::LoadMetadataFile(const char* fileName) { std::string resourcesDirectory = utils::PathUtils::Combine(utils::Runtime::GetDataDir(), utils::StringView("Metadata")); std::string resourceFilePath = utils::PathUtils::Combine(resourcesDirectory, utils::StringView(fileName, strlen(fileName))); int error = 0; os::FileHandle* handle = os::File::Open(resourceFilePath, kFileModeOpen, kFileAccessRead, kFileShareRead, kFileOptionsNone, &error); if (error != 0) { utils::Logging::Write("ERROR: Could not open %s", resourceFilePath.c_str()); return NULL; } void* fileBuffer = utils::MemoryMappedFile::Map(handle); os::File::Close(handle, &error); if (error != 0) { utils::MemoryMappedFile::Unmap(fileBuffer); fileBuffer = NULL; return NULL; } return fileBuffer; } void il2cpp::vm::MetadataLoader::UnloadMetadataFile(void* fileBuffer) { bool success = il2cpp::utils::MemoryMappedFile::Unmap(fileBuffer); NO_UNUSED_WARNING(success); IL2CPP_ASSERT(success); }