mirror of https://github.com/OpenRCT2/OpenRCT2.git
This commit is contained in:
parent
f08206a5d0
commit
fec55f590f
|
@ -684,20 +684,12 @@ void save_game_as()
|
||||||
delete intent;
|
delete intent;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t compare_autosave_file_paths(const void* a, const void* b)
|
|
||||||
{
|
|
||||||
return strcmp(static_cast<const char*>(a), static_cast<const char*>(b));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void limit_autosave_count(const size_t numberOfFilesToKeep, bool processLandscapeFolder)
|
static void limit_autosave_count(const size_t numberOfFilesToKeep, bool processLandscapeFolder)
|
||||||
{
|
{
|
||||||
size_t autosavesCount = 0;
|
size_t autosavesCount = 0;
|
||||||
size_t numAutosavesToDelete = 0;
|
size_t numAutosavesToDelete = 0;
|
||||||
|
|
||||||
utf8 filter[MAX_PATH];
|
utf8 filter[MAX_PATH];
|
||||||
|
|
||||||
utf8** autosaveFiles = nullptr;
|
|
||||||
|
|
||||||
if (processLandscapeFolder)
|
if (processLandscapeFolder)
|
||||||
{
|
{
|
||||||
platform_get_user_directory(filter, "landscape", sizeof(filter));
|
platform_get_user_directory(filter, "landscape", sizeof(filter));
|
||||||
|
@ -726,47 +718,39 @@ static void limit_autosave_count(const size_t numberOfFilesToKeep, bool processL
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
autosaveFiles = static_cast<utf8**>(malloc(sizeof(utf8*) * autosavesCount));
|
auto autosaveFiles = std::vector<std::string>(autosavesCount);
|
||||||
|
|
||||||
{
|
{
|
||||||
auto scanner = std::unique_ptr<IFileScanner>(Path::ScanDirectory(filter, false));
|
auto scanner = std::unique_ptr<IFileScanner>(Path::ScanDirectory(filter, false));
|
||||||
for (size_t i = 0; i < autosavesCount; i++)
|
for (size_t i = 0; i < autosavesCount; i++)
|
||||||
{
|
{
|
||||||
autosaveFiles[i] = static_cast<utf8*>(malloc(sizeof(utf8) * MAX_PATH));
|
autosaveFiles[i].resize(MAX_PATH, 0);
|
||||||
std::memset(autosaveFiles[i], 0, sizeof(utf8) * MAX_PATH);
|
|
||||||
|
|
||||||
if (scanner->Next())
|
if (scanner->Next())
|
||||||
{
|
{
|
||||||
if (processLandscapeFolder)
|
if (processLandscapeFolder)
|
||||||
{
|
{
|
||||||
platform_get_user_directory(autosaveFiles[i], "landscape", sizeof(utf8) * MAX_PATH);
|
platform_get_user_directory(autosaveFiles[i].data(), "landscape", sizeof(utf8) * MAX_PATH);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
platform_get_user_directory(autosaveFiles[i], "save", sizeof(utf8) * MAX_PATH);
|
platform_get_user_directory(autosaveFiles[i].data(), "save", sizeof(utf8) * MAX_PATH);
|
||||||
}
|
}
|
||||||
safe_strcat_path(autosaveFiles[i], "autosave", sizeof(utf8) * MAX_PATH);
|
safe_strcat_path(autosaveFiles[i].data(), "autosave", sizeof(utf8) * MAX_PATH);
|
||||||
safe_strcat_path(autosaveFiles[i], scanner->GetPathRelative(), sizeof(utf8) * MAX_PATH);
|
safe_strcat_path(autosaveFiles[i].data(), scanner->GetPathRelative(), sizeof(utf8) * MAX_PATH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qsort(autosaveFiles, autosavesCount, sizeof(char*), compare_autosave_file_paths);
|
std::sort(autosaveFiles.begin(), autosaveFiles.end(), [](const auto& saveFile0, const auto& saveFile1) {
|
||||||
|
return saveFile0.compare(saveFile1) < 0;
|
||||||
|
});
|
||||||
|
|
||||||
// Calculate how many saves we need to delete.
|
// Calculate how many saves we need to delete.
|
||||||
numAutosavesToDelete = autosavesCount - numberOfFilesToKeep;
|
numAutosavesToDelete = autosavesCount - numberOfFilesToKeep;
|
||||||
|
|
||||||
for (size_t i = 0; numAutosavesToDelete > 0; i++, numAutosavesToDelete--)
|
for (size_t i = 0; numAutosavesToDelete > 0; i++, numAutosavesToDelete--)
|
||||||
{
|
{
|
||||||
platform_file_delete(autosaveFiles[i]);
|
platform_file_delete(autosaveFiles[i].data());
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < autosavesCount; i++)
|
|
||||||
{
|
|
||||||
free(autosaveFiles[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(autosaveFiles);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void game_autosave()
|
void game_autosave()
|
||||||
|
|
Loading…
Reference in New Issue