diff options
| author | Tilka <tilkax@gmail.com> | 2025-06-08 04:04:37 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-08 04:04:37 +0100 |
| commit | 19fbbf0dba32ad98fe791804cfd464ced91464f5 (patch) | |
| tree | 24fd224e2185a3c77c57fb50f8af63ce0df21493 /Source/Core | |
| parent | 1786e34bd34db61b910064741294e87bfb4d3e91 (diff) | |
| parent | 4b65cc9a4c51af4308f748b3e7bf25d80db83860 (diff) | |
Merge pull request #13727 from JoshuaVandaele/fmt-11.2.0-localtime-deprec
fmt: Replace deprecated `fmt::localtime` usage with `Common::LocalTime`
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/AudioCommon/AudioCommon.cpp | 8 | ||||
| -rw-r--r-- | Source/Core/Common/FatFsUtil.cpp | 8 | ||||
| -rw-r--r-- | Source/Core/Common/SettingsHandler.cpp | 3 | ||||
| -rw-r--r-- | Source/Core/Common/TimeUtil.cpp | 12 | ||||
| -rw-r--r-- | Source/Core/Common/TimeUtil.h | 2 | ||||
| -rw-r--r-- | Source/Core/Core/Core.cpp | 14 | ||||
| -rw-r--r-- | Source/Core/Core/NetworkCaptureLogger.cpp | 3 | ||||
| -rw-r--r-- | Source/Core/Core/State.cpp | 2 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/FrameDumpFFMpeg.cpp | 7 |
9 files changed, 36 insertions, 23 deletions
diff --git a/Source/Core/AudioCommon/AudioCommon.cpp b/Source/Core/AudioCommon/AudioCommon.cpp index bc1efe01d4..5d5de977b5 100644 --- a/Source/Core/AudioCommon/AudioCommon.cpp +++ b/Source/Core/AudioCommon/AudioCommon.cpp @@ -16,6 +16,7 @@ #include "AudioCommon/WASAPIStream.h" #include "Common/FileUtil.h" #include "Common/Logging/Log.h" +#include "Common/TimeUtil.h" #include "Core/Config/MainSettings.h" #include "Core/ConfigManager.h" #include "Core/System.h" @@ -219,8 +220,11 @@ void StartAudioDump(Core::System& system) std::string path_prefix = File::GetUserPath(D_DUMPAUDIO_IDX) + SConfig::GetInstance().GetGameID(); - std::string base_name = - fmt::format("{}_{:%Y-%m-%d_%H-%M-%S}", path_prefix, fmt::localtime(start_time)); + const auto local_time = Common::LocalTime(start_time); + if (!local_time) + return; + + std::string base_name = fmt::format("{}_{:%Y-%m-%d_%H-%M-%S}", path_prefix, *local_time); const std::string audio_file_name_dtk = fmt::format("{}_dtkdump.wav", base_name); const std::string audio_file_name_dsp = fmt::format("{}_dspdump.wav", base_name); diff --git a/Source/Core/Common/FatFsUtil.cpp b/Source/Core/Common/FatFsUtil.cpp index 9c513d5e42..80e2c424b4 100644 --- a/Source/Core/Common/FatFsUtil.cpp +++ b/Source/Core/Common/FatFsUtil.cpp @@ -25,6 +25,7 @@ #include "Common/Logging/Log.h" #include "Common/ScopeGuard.h" #include "Common/StringUtil.h" +#include "Common/TimeUtil.h" #include "Core/Config/MainSettings.h" @@ -95,12 +96,7 @@ int SDCardDiskIOCtl(File::IOFile* image, u8 pdrv, u8 cmd, void* buff) u32 GetSystemTimeFAT() { const std::time_t time = std::time(nullptr); - std::tm tm; -#ifdef _WIN32 - localtime_s(&tm, &time); -#else - localtime_r(&time, &tm); -#endif + std::tm tm = *Common::LocalTime(time); DWORD fattime = 0; fattime |= (tm.tm_year - 80) << 25; diff --git a/Source/Core/Common/SettingsHandler.cpp b/Source/Core/Common/SettingsHandler.cpp index 6cc9f5a8fe..b0faf6f6f0 100644 --- a/Source/Core/Common/SettingsHandler.cpp +++ b/Source/Core/Common/SettingsHandler.cpp @@ -122,7 +122,6 @@ std::string SettingsWriter::GenerateSerialNumber() // Must be 9 characters at most; otherwise the serial number will be rejected by SDK libraries, // as there is a check to ensure the string length is strictly lower than 10. - // 3 for %j, 2 for %H, 2 for %M, 2 for %S. - return fmt::format("{:%j%H%M%S}", fmt::localtime(t)); + return fmt::format("{:09}", t % 1000000000); } } // namespace Common diff --git a/Source/Core/Common/TimeUtil.cpp b/Source/Core/Common/TimeUtil.cpp index 39d989fb3f..93327e9136 100644 --- a/Source/Core/Common/TimeUtil.cpp +++ b/Source/Core/Common/TimeUtil.cpp @@ -2,23 +2,25 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include "Common/TimeUtil.h" +#include "Common/Logging/Log.h" #include <ctime> #include <optional> namespace Common { -std::optional<std::tm> Localtime(std::time_t time) +std::optional<std::tm> LocalTime(std::time_t time) { std::tm local_time; #ifdef _MSC_VER if (localtime_s(&local_time, &time) != 0) - return std::nullopt; #else - std::tm* result = localtime_r(&time, &local_time); - if (result != &local_time) - return std::nullopt; + if (localtime_r(&time, &local_time) == NULL) #endif + { + ERROR_LOG_FMT(COMMON, "Failed to convert time to local time: {}", std::strerror(errno)); + return std::nullopt; + } return local_time; } } // Namespace Common diff --git a/Source/Core/Common/TimeUtil.h b/Source/Core/Common/TimeUtil.h index ff9ca02a12..3abb525e5e 100644 --- a/Source/Core/Common/TimeUtil.h +++ b/Source/Core/Common/TimeUtil.h @@ -9,5 +9,5 @@ namespace Common { // Threadsafe and error-checking variant of std::localtime() -std::optional<std::tm> Localtime(std::time_t time); +std::optional<std::tm> LocalTime(std::time_t time); } // Namespace Common diff --git a/Source/Core/Core/Core.cpp b/Source/Core/Core/Core.cpp index 7de860e59c..e02be0d1ed 100644 --- a/Source/Core/Core/Core.cpp +++ b/Source/Core/Core/Core.cpp @@ -8,6 +8,7 @@ #include <cstring> #include <functional> #include <mutex> +#include <optional> #include <queue> #include <utility> #include <variant> @@ -34,6 +35,7 @@ #include "Common/ScopeGuard.h" #include "Common/StringUtil.h" #include "Common/Thread.h" +#include "Common/TimeUtil.h" #include "Common/Version.h" #include "Core/AchievementManager.h" @@ -733,15 +735,17 @@ static std::string GenerateScreenshotFolderPath() return path; } -static std::string GenerateScreenshotName() +static std::optional<std::string> GenerateScreenshotName() { // append gameId, path only contains the folder here. const std::string path_prefix = GenerateScreenshotFolderPath() + SConfig::GetInstance().GetGameID(); const std::time_t cur_time = std::time(nullptr); - const std::string base_name = - fmt::format("{}_{:%Y-%m-%d_%H-%M-%S}", path_prefix, fmt::localtime(cur_time)); + const auto local_time = Common::LocalTime(cur_time); + if (!local_time) + return std::nullopt; + const std::string base_name = fmt::format("{}_{:%Y-%m-%d_%H-%M-%S}", path_prefix, *local_time); // First try a filename without any suffixes, if already exists then append increasing numbers std::string name = fmt::format("{}.png", base_name); @@ -757,7 +761,9 @@ static std::string GenerateScreenshotName() void SaveScreenShot() { const Core::CPUThreadGuard guard(Core::System::GetInstance()); - g_frame_dumper->SaveScreenshot(GenerateScreenshotName()); + std::optional<std::string> name = GenerateScreenshotName(); + if (name) + g_frame_dumper->SaveScreenshot(*name); } void SaveScreenShot(std::string_view name) diff --git a/Source/Core/Core/NetworkCaptureLogger.cpp b/Source/Core/Core/NetworkCaptureLogger.cpp index bc645a05c4..b6706fc59f 100644 --- a/Source/Core/Core/NetworkCaptureLogger.cpp +++ b/Source/Core/Core/NetworkCaptureLogger.cpp @@ -16,6 +16,7 @@ #include "Common/Network.h" #include "Common/PcapFile.h" #include "Common/ScopeGuard.h" +#include "Common/TimeUtil.h" #include "Core/Config/MainSettings.h" #include "Core/ConfigManager.h" @@ -82,7 +83,7 @@ PCAPSSLCaptureLogger::PCAPSSLCaptureLogger() { const std::string filepath = fmt::format("{}{} {:%Y-%m-%d %Hh%Mm%Ss}.pcap", File::GetUserPath(D_DUMPSSL_IDX), - SConfig::GetInstance().GetGameID(), fmt::localtime(std::time(nullptr))); + SConfig::GetInstance().GetGameID(), *Common::LocalTime(std::time(nullptr))); m_file = std::make_unique<Common::PCAP>( new File::IOFile(filepath, "wb", File::SharedAccess::Read), Common::PCAP::LinkType::Ethernet); } diff --git a/Source/Core/Core/State.cpp b/Source/Core/Core/State.cpp index 556aff170a..f508fd202d 100644 --- a/Source/Core/Core/State.cpp +++ b/Source/Core/Core/State.cpp @@ -281,7 +281,7 @@ static std::string SystemTimeAsDoubleToString(double time) { // revert adjustments from GetSystemTimeAsDouble() to get a normal Unix timestamp again const time_t seconds = static_cast<time_t>(time) + DOUBLE_TIME_OFFSET; - const auto local_time = Common::Localtime(seconds); + const auto local_time = Common::LocalTime(seconds); if (!local_time) return ""; diff --git a/Source/Core/VideoCommon/FrameDumpFFMpeg.cpp b/Source/Core/VideoCommon/FrameDumpFFMpeg.cpp index 44ec0a6a27..e0e61529f7 100644 --- a/Source/Core/VideoCommon/FrameDumpFFMpeg.cpp +++ b/Source/Core/VideoCommon/FrameDumpFFMpeg.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include "VideoCommon/FrameDumpFFMpeg.h" +#include "Common/TimeUtil.h" #if defined(__FreeBSD__) #define __STDC_CONSTANT_MACROS 1 @@ -124,11 +125,15 @@ std::string GetDumpPath(const std::string& extension, std::time_t time, u32 inde if (!dump_path.empty()) return dump_path; + const auto local_time = Common::LocalTime(time); + if (!local_time) + return ""; + const std::string path_prefix = File::GetUserPath(D_DUMPFRAMES_IDX) + SConfig::GetInstance().GetGameID(); const std::string base_name = - fmt::format("{}_{:%Y-%m-%d_%H-%M-%S}_{}", path_prefix, fmt::localtime(time), index); + fmt::format("{}_{:%Y-%m-%d_%H-%M-%S}_{}", path_prefix, *local_time, index); const std::string path = fmt::format("{}.{}", base_name, extension); |
