diff options
3 files changed, 22 insertions, 13 deletions
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_app_icon_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_app_icon_request.cc index e6332d85c8..a36f396842 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_app_icon_request.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_app_icon_request.cc @@ -200,10 +200,21 @@ void SetAppIconRequest::CopyToIconStorage( return; } +struct compareTime { + bool operator()(const time_t t1, const time_t t2) { + double time_difference = difftime(t1, t2); + if (time_difference > 0) { + return true; + } else { + return false; + } + } +}; + void SetAppIconRequest::RemoveOldestIcons(const std::string& storage, const uint32_t icons_amount) const { const std::vector<std::string> icons_list = file_system::ListFiles(storage); - std::map<uint64_t, std::string> icon_modification_time; + std::map<time_t, std::string, compareTime> icon_modification_time; std::vector<std::string>::const_iterator it = icons_list.begin(); for (; it != icons_list.end(); ++it) { const std::string file_name = *it; @@ -211,7 +222,7 @@ void SetAppIconRequest::RemoveOldestIcons(const std::string& storage, if (!file_system::FileExists(file_path)) { continue; } - const uint64_t time = file_system::GetFileModificationTime(file_path); + const time_t time = file_system::GetFileModificationTime(file_path); icon_modification_time[time] = file_name; } diff --git a/src/components/utils/include/utils/file_system.h b/src/components/utils/include/utils/file_system.h index cdd7b478d6..61495d462c 100644 --- a/src/components/utils/include/utils/file_system.h +++ b/src/components/utils/include/utils/file_system.h @@ -39,6 +39,7 @@ #include <iostream> #include <string> #include <vector> +#include <time.h> namespace file_system { @@ -263,7 +264,7 @@ bool CreateFile(const std::string& path); * @param path Path to file * @return Modification time in nanoseconds */ -uint64_t GetFileModificationTime(const std::string& path); +time_t GetFileModificationTime(const std::string& path); /** * @brief Copy file from source to destination diff --git a/src/components/utils/src/file_system.cc b/src/components/utils/src/file_system.cc index 92fc643577..19a6388fcf 100644 --- a/src/components/utils/src/file_system.cc +++ b/src/components/utils/src/file_system.cc @@ -213,7 +213,7 @@ bool file_system::IsFileNameValid(const std::string& file_name) { // Does not remove if file is write-protected bool file_system::DeleteFile(const std::string& name) { if (FileExists(name) && IsAccessible(name, W_OK)) { - return !remove(name.c_str()); + return fs::remove(name.c_str()); } return false; } @@ -364,16 +364,13 @@ bool file_system::CreateFile(const std::string& path) { } } -// NOTE: this seems to be buggy -// It returns only the ns _component_ of modify time, not the whole thing -// see https://github.com/smartdevicelink/sdl_core/pull/1436/commits for a -// potential fix / further explanation -uint64_t file_system::GetFileModificationTime(const std::string& path) { - struct stat info; - if (0 != stat(path.c_str(), &info)) { - LOG4CXX_WARN_WITH_ERRNO(logger_, "Could not get file mod time: " << path); +time_t file_system::GetFileModificationTime(const std::string& path) { + error_code ec; + std::time_t time = fs::last_write_time(path, ec); + if (ec) { + return 0; } - return static_cast<uint64_t>(info.st_mtim.tv_nsec); + return time; } bool file_system::CopyFile(const std::string& src, const std::string& dst) { |