diff --git a/External/FEXCore/Source/Interface/Core/Core.cpp b/External/FEXCore/Source/Interface/Core/Core.cpp index eb6e36b2d..cb775307d 100644 --- a/External/FEXCore/Source/Interface/Core/Core.cpp +++ b/External/FEXCore/Source/Interface/Core/Core.cpp @@ -42,6 +42,7 @@ $end_info$ #include #include #include +#include #include #include #include @@ -715,36 +716,30 @@ namespace FEXCore::Context { } static void IRDumper(FEXCore::Core::InternalThreadState *Thread, IR::IREmitter *IREmitter, uint64_t GuestRIP, IR::RegisterAllocationData* RA) { -#ifndef _WIN32 - int FD {-1}; - bool CloseAfter = false; + FEXCore::File::File FD; const auto DumpIRStr = static_cast(Thread->CTX)->Config.DumpIR(); // DumpIRStr might be no if not dumping but ShouldDump is set in OpDisp if (DumpIRStr =="stderr" || DumpIRStr =="no") { - FD = STDERR_FILENO; + FD = FEXCore::File::File::GetStdERR(); } else if (DumpIRStr =="stdout") { - FD = STDOUT_FILENO; + FD = FEXCore::File::File::GetStdOUT(); } else { const auto fileName = fextl::fmt::format("{}/{:x}{}", DumpIRStr, GuestRIP, RA ? "-post.ir" : "-pre.ir"); - constexpr int USER_PERMS = S_IRWXU | S_IRWXG | S_IRWXO; - FD = open(fileName.c_str(), O_CREAT | O_WRONLY | O_TRUNC | O_CLOEXEC, USER_PERMS, USER_PERMS); - CloseAfter = true; + FD = FEXCore::File::File(fileName.c_str(), + FEXCore::File::FileModes::WRITE | + FEXCore::File::FileModes::CREATE | + FEXCore::File::FileModes::TRUNCATE); } - if (FD != -1) { + if (FD.IsValid()) { fextl::stringstream out; auto NewIR = IREmitter->ViewIR(); FEXCore::IR::Dump(&out, &NewIR, RA); fextl::fmt::print(FD, "IR-{} 0x{:x}:\n{}\n@@@@@\n", RA ? "post" : "pre", GuestRIP, out.str()); - - if (CloseAfter) { - close(FD); - } } -#endif }; static void ValidateIR(ContextImpl *ctx, IR::IREmitter *IREmitter) { diff --git a/External/FEXCore/Source/Utils/Telemetry.cpp b/External/FEXCore/Source/Utils/Telemetry.cpp index db901e912..0514909f1 100644 --- a/External/FEXCore/Source/Utils/Telemetry.cpp +++ b/External/FEXCore/Source/Utils/Telemetry.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -35,7 +36,6 @@ namespace FEXCore::Telemetry { } void Shutdown(fextl::string const &ApplicationName) { -#ifndef _WIN32 auto DataDirectory = Config::GetDataDirectory(); DataDirectory += "Telemetry/" + ApplicationName + ".telem"; @@ -45,20 +45,19 @@ namespace FEXCore::Telemetry { FHU::Filesystem::CopyFile(DataDirectory, Backup, FHU::Filesystem::CopyOptions::OVERWRITE_EXISTING); } - constexpr int USER_PERMS = S_IRWXU | S_IRWXG | S_IRWXO; - int fd = open(DataDirectory.c_str(), O_CREAT | O_WRONLY | O_TRUNC | O_CLOEXEC, USER_PERMS); + auto File = FEXCore::File::File(DataDirectory.c_str(), + FEXCore::File::FileModes::WRITE | + FEXCore::File::FileModes::CREATE | + FEXCore::File::FileModes::TRUNCATE); - if (fd != -1) { + if (File.IsValid()) { for (size_t i = 0; i < TelemetryType::TYPE_LAST; ++i) { auto &Name = TelemetryNames.at(i); auto &Data = TelemetryValues.at(i); - auto Output = fextl::fmt::format("{}: {}\n", Name, *Data); - write(fd, Output.c_str(), Output.size()); + fextl::fmt::print(File, "{}: {}\n", Name, *Data); } - fsync(fd); - close(fd); + File.Flush(); } -#endif } Value &GetObject(TelemetryType Type) {