From d99e89977460f36b2abf09d53f932b41034c7e1e Mon Sep 17 00:00:00 2001 From: Adam Reichold Date: Wed, 27 Jan 2016 19:33:06 +0100 Subject: [PATCH] Fix #3122 by properly splitting out the MD5 part of the data file name to get the base file name when limiting the cache. --- rtgui/cachemanager.cc | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/rtgui/cachemanager.cc b/rtgui/cachemanager.cc index 4d3949890..4bfa7e5e6 100644 --- a/rtgui/cachemanager.cc +++ b/rtgui/cachemanager.cc @@ -351,7 +351,7 @@ void CacheManager::applyCacheSizeLimitation () const const auto dirName = Glib::build_filename (baseDir, "data"); const auto dir = Gio::File::create_for_path (dirName); - auto enumerator = dir->enumerate_children (); + auto enumerator = dir->enumerate_children ("standard::*,time::*"); while (auto file = enumerator->next_file ()) { files.emplace_back (file->get_name (), file->modification_time ()); @@ -370,11 +370,21 @@ void CacheManager::applyCacheSizeLimitation () const auto cacheEntries = files.size (); - for (auto entry = files.begin(); cacheEntries-- > options.maxCacheEntries; ++entry) { + for (auto entry = files.begin (); cacheEntries-- > options.maxCacheEntries; ++entry) { - const auto& fname = entry->first; + const auto& name = entry->first; - deleteFiles (fname, getMD5 (fname), true, false); + constexpr auto md5_size = 32; + const auto name_size = name.size(); + + if (name_size < md5_size + 5) { + continue; + } + + const auto fname = name.substr (0, name_size - md5_size - 5); + const auto md5 = name.substr (name_size - md5_size - 4, md5_size); + + deleteFiles (fname, md5, true, false); } }