Wipe clean VSH's temporary directory of choice at boot

This commit is contained in:
Eladash 2022-01-07 19:16:03 +02:00 committed by Ivan
parent 285322982f
commit 1088375b38
7 changed files with 15 additions and 6 deletions

View File

@ -1788,7 +1788,7 @@ const std::string& fs::get_temp_dir()
return s_dir; return s_dir;
} }
bool fs::remove_all(const std::string& path, bool remove_root) bool fs::remove_all(const std::string& path, bool remove_root, bool is_no_dir_ok)
{ {
if (const auto root_dir = dir(path)) if (const auto root_dir = dir(path))
{ {
@ -1817,7 +1817,7 @@ bool fs::remove_all(const std::string& path, bool remove_root)
} }
else else
{ {
return false; return is_no_dir_ok;
} }
if (remove_root) if (remove_root)

View File

@ -648,7 +648,7 @@ namespace fs
}; };
// Delete directory and all its contents recursively // Delete directory and all its contents recursively
bool remove_all(const std::string& path, bool remove_root = true); bool remove_all(const std::string& path, bool remove_root = true, bool is_no_dir_ok = false);
// Get size of all files recursively // Get size of all files recursively
u64 get_dir_size(const std::string& path, u64 rounding_alignment = 1); u64 get_dir_size(const std::string& path, u64 rounding_alignment = 1);

View File

@ -381,7 +381,15 @@ void Emulator::Init(bool add_only)
// Limit cache size // Limit cache size
if (!is_exitspawn && g_cfg.vfs.limit_cache_size) if (!is_exitspawn && g_cfg.vfs.limit_cache_size)
{
rpcs3::cache::limit_cache_size(); rpcs3::cache::limit_cache_size();
}
// Wipe clean VSH's temporary directory of choice
if (g_cfg.vfs.empty_hdd0_tmp && !is_exitspawn && !fs::remove_all(dev_hdd0 + "tmp/", false, true))
{
sys_log.error("Could not clean /dev_hdd0/tmp/ (%s)", fs::g_tls_error);
}
} }
void Emulator::SetUsr(const std::string& user) void Emulator::SetUsr(const std::string& user)

View File

@ -96,7 +96,7 @@ namespace rpcs3::cache
break; break;
} }
if (is_dir ? !fs::remove_all(name, true) : !fs::remove_file(name)) if (is_dir ? !fs::remove_all(name, true, true) : !fs::remove_file(name))
{ {
sys_log.error("Could not remove cache directory '%s' item '%s' (%s)", cache_location, item.name, fs::g_tls_error); sys_log.error("Could not remove cache directory '%s' item '%s' (%s)", cache_location, item.name, fs::g_tls_error);
break; break;

View File

@ -94,6 +94,7 @@ struct cfg_root : cfg::node
cfg::_bool limit_cache_size{ this, "Limit disk cache size", false }; cfg::_bool limit_cache_size{ this, "Limit disk cache size", false };
cfg::_int<0, 10240> cache_max_size{ this, "Disk cache maximum size (MB)", 5120 }; cfg::_int<0, 10240> cache_max_size{ this, "Disk cache maximum size (MB)", 5120 };
cfg::_bool empty_hdd0_tmp{ this, "Empty /dev_hdd0/tmp/", true };
} vfs{ this }; } vfs{ this };

View File

@ -56,7 +56,7 @@ bool TRPLoader::Install(std::string_view dest, bool /*show*/)
if (success) if (success)
{ {
success = fs::remove_all(local_path) || !fs::is_dir(local_path); success = fs::remove_all(local_path, true, true);
if (success) if (success)
{ {

View File

@ -2602,7 +2602,7 @@ void main_window::RemoveDiskCache()
{ {
const std::string cache_dir = rpcs3::utils::get_hdd1_dir() + "/caches"; const std::string cache_dir = rpcs3::utils::get_hdd1_dir() + "/caches";
if (fs::is_dir(cache_dir) && fs::remove_all(cache_dir, false)) if (fs::remove_all(cache_dir, false))
{ {
QMessageBox::information(this, tr("Cache Cleared"), tr("Disk cache was cleared successfully")); QMessageBox::information(this, tr("Cache Cleared"), tr("Disk cache was cleared successfully"));
} }