#include "il2cpp-config.h" #if IL2CPP_TARGET_LUMIN #include "os/Lumin/File.h" #include "os/Lumin/Lifecycle.h" #include "os/Posix/FileHandle.h" #include "utils/PathUtils.h" #include #include #include #include #include namespace il2cpp { namespace os { namespace lumin { int s_StandardErrDescriptor = -1; int s_StandardOutDescriptor = -1; void InitializeFileHandles() { std::string base = GetPackageTempPath(); std::string errPath = PathForErrorLog(); std::string outPath = PathForOutputLog(); s_StandardErrDescriptor = creat(errPath.c_str(), S_IRUSR | S_IWUSR); s_StandardOutDescriptor = creat(outPath.c_str(), S_IRUSR | S_IWUSR); } void CleanupFileHandles() { if (s_StandardErrDescriptor >= 0) { fdatasync(s_StandardErrDescriptor); close(s_StandardErrDescriptor); } if (s_StandardOutDescriptor >= 0) { fdatasync(s_StandardOutDescriptor); close(s_StandardOutDescriptor); } } std::string PathForErrorLog() { return il2cpp::utils::PathUtils::Combine(GetPackageTempPath(), std::string("stderr.log")); } std::string PathForOutputLog() { return il2cpp::utils::PathUtils::Combine(GetPackageTempPath(), std::string("stdout.log")); } } FileHandle* File::GetStdError() { static FileHandle* s_handle = NULL; if (s_handle) return s_handle; s_handle = new FileHandle(); s_handle->fd = lumin::s_StandardErrDescriptor; s_handle->type = kFileTypeChar; s_handle->options = 0; s_handle->accessMode = kFileAccessReadWrite; s_handle->shareMode = -1; // Only used for files return s_handle; } FileHandle* File::GetStdInput() { static FileHandle* s_handle = NULL; if (s_handle) return s_handle; s_handle = new FileHandle(); s_handle->fd = 0; s_handle->type = kFileTypeChar; s_handle->options = 0; s_handle->accessMode = kFileAccessRead; s_handle->shareMode = -1; // Only used for files return s_handle; } FileHandle* File::GetStdOutput() { static FileHandle* s_handle = NULL; if (s_handle) return s_handle; s_handle = new FileHandle(); s_handle->fd = lumin::s_StandardOutDescriptor; s_handle->type = kFileTypeChar; s_handle->options = 0; s_handle->accessMode = kFileAccessReadWrite; s_handle->shareMode = -1; // Only used for files return s_handle; } } } #endif