fix(SaveData): use C++20 file clock conversion

This commit is contained in:
MarcZX100 2026-10-07 20:11:36 +00:00
parent 8b393b6e9a
commit 4e0e55ff45
2 changed files with 19 additions and 1 deletions

View File

@ -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<std::chrono::system_clock>(written);
const auto system = std::filesystem::file_time_type::clock::to_sys(written);
param.mtime = std::chrono::duration_cast<std::chrono::seconds>(system.time_since_epoch()).count();
}
}

View File

@ -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<std::chrono::seconds>(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());