diff --git a/src/driver/fb_generic.cpp b/src/driver/fb_generic.cpp index 2f5872c7d..72ed091a9 100644 --- a/src/driver/fb_generic.cpp +++ b/src/driver/fb_generic.cpp @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -706,20 +707,19 @@ void CFrameBuffer::setIconBasePath(const std::string & iconPath) std::string CFrameBuffer::getIconPath(std::string icon_name, std::string file_type) { - // why search when we have an absolut path? - if (icon_name.find("/", 0) != std::string::npos) + if ((icon_name.find("/", 0) != std::string::npos) && file_exists(icon_name)) return icon_name; std::vector filetypes = { ".svg", ".png", ".jpg" }; - std::string path = icon_name; + std::string icon = icon_name; - std::string::size_type pos = icon_name.find_last_of("."); + std::string::size_type pos = icon.find_last_of("."); if (pos != std::string::npos && file_type.empty()) { if (std::find(filetypes.begin(), filetypes.end(), icon_name.substr(pos)) != filetypes.end()) { - icon_name = path.substr(0, pos); - file_type = path.substr(pos + 1); + icon_name = icon.substr(0, pos); + file_type = icon.substr(pos + 1); } } @@ -741,11 +741,9 @@ std::string CFrameBuffer::getIconPath(std::string icon_name, std::string file_ty { for (unsigned int i = 0; i < dir.size(); i++) { - path = std::string(dir[i]) + "/" + icon_name + filetypes[t]; - if (access(path.c_str(), F_OK) == 0) - { - return path; - } + icon = std::string(dir[i]) + "/" + icon_name + filetypes[t]; + if (file_exists(icon)) + return icon; } }