From 4e0e55ff45aa42d693be4a6da459f3ee91c8afd7 Mon Sep 17 00:00:00 2001 From: MarcZX100 Date: Wed, 7 Oct 2026 20:11:36 +0000 Subject: [PATCH] fix(SaveData): use C++20 file clock conversion --- core/libs/prx/libSceSaveData.native/Export.cpp | 2 +- core/libs/tests/SaveDataMemoryMetadata.cpp | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/core/libs/prx/libSceSaveData.native/Export.cpp b/core/libs/prx/libSceSaveData.native/Export.cpp index f6270b5dd..78109c706 100644 --- a/core/libs/prx/libSceSaveData.native/Export.cpp +++ b/core/libs/prx/libSceSaveData.native/Export.cpp @@ -140,7 +140,7 @@ SaveDataParam load_param(const std::string& real_path) { std::error_code ec; const auto written = std::filesystem::last_write_time(real_path, ec); if (!ec) { - const auto system = std::chrono::clock_cast(written); + const auto system = std::filesystem::file_time_type::clock::to_sys(written); param.mtime = std::chrono::duration_cast(system.time_since_epoch()).count(); } } diff --git a/core/libs/tests/SaveDataMemoryMetadata.cpp b/core/libs/tests/SaveDataMemoryMetadata.cpp index 70724bd18..30585260f 100644 --- a/core/libs/tests/SaveDataMemoryMetadata.cpp +++ b/core/libs/tests/SaveDataMemoryMetadata.cpp @@ -19,6 +19,7 @@ extern "C" { int APS5_VABI sceSaveDataInitialize3(const void*); int APS5_VABI sceSaveDataTerminate(); int APS5_VABI sceSaveDataSetSaveDataMemory2(const SaveDataMemorySet2*); +int APS5_VABI sceSaveDataDirNameSearch(const SaveDataDirNameSearchCond*, SaveDataDirNameSearchResult*); } static void Check(bool value, int line) { @@ -41,6 +42,23 @@ int main() { ("anyps5-metadata-" + std::to_string(std::chrono::steady_clock::now().time_since_epoch().count())); Require(std::filesystem::create_directory(root)); std::filesystem::current_path(root); + const auto expected_mtime = std::chrono::system_clock::time_point{std::chrono::seconds{1700000000}}; + const auto save_directory = std::filesystem::path("_sd/mtime"); + Require(std::filesystem::create_directories(save_directory)); + std::filesystem::last_write_time(save_directory, + std::filesystem::file_time_type::clock::from_sys(expected_mtime)); + SceSaveDataDirName dir_name{}; + SaveDataParam searched_param{}; + SaveDataDirNameSearchCond search_cond{}; + SaveDataDirNameSearchResult search_result{}; + search_result.dir_names = &dir_name; + search_result.dir_names_num = 1; + search_result.params = &searched_param; + Require(sceSaveDataDirNameSearch(&search_cond, &search_result) == 0); + Require(search_result.hit_num == 1 && search_result.set_num == 1); + Require(std::string(dir_name.data) == "mtime"); + Require(searched_param.mtime == std::chrono::duration_cast(expected_mtime.time_since_epoch()).count()); + const auto path = std::filesystem::path("_sd_mem/u7531/slot0.param"); const auto memoryPath = std::filesystem::path("_sd_mem/u7531/slot0.bin"); std::filesystem::create_directories(path.parent_path());