diff --git a/include/tools.h b/include/tools.h index 45f06ca77..b7ffb576d 100644 --- a/include/tools.h +++ b/include/tools.h @@ -180,13 +180,22 @@ std::string getFileContent(const std::string& path); /** checks if file exists. * - * This function returns boolean stating if file exists or not. + * This function returns boolean stating if file exists. * * @param path The absolute path provided in string format. * @return Boolean representing if file exists or not. */ bool fileExists(const std::string& path); +/** checks if file is readable. + * + * This function returns boolean stating if file is readable. + * + * @param path The absolute path provided in string format. + * @return Boolean representing if file is readale or not. + */ +bool fileReadable(const std::string& path); + /** provides mimetype from filename. * * This function provides mimetype from file-name. diff --git a/src/aria2.cpp b/src/aria2.cpp index 1ee015ff4..78f541128 100644 --- a/src/aria2.cpp +++ b/src/aria2.cpp @@ -70,7 +70,7 @@ Aria2::Aria2(): callCmd.push_back(rpc_secret.c_str()); callCmd.push_back(rpc_port.c_str()); callCmd.push_back(download_dir.c_str()); - if (fileExists(session_file)) { + if (fileReadable(session_file)) { callCmd.push_back(inputFile.c_str()); } callCmd.push_back(session.c_str()); diff --git a/src/book.cpp b/src/book.cpp index e04b0192e..17201e33a 100644 --- a/src/book.cpp +++ b/src/book.cpp @@ -108,7 +108,7 @@ void Book::updateFromXml(const pugi::xml_node& node, const std::string& baseDir) path = computeAbsolutePath(baseDir, path); } m_path = path; - m_pathValid = fileExists(path); + m_pathValid = fileReadable(path); m_title = ATTR("title"); m_description = ATTR("description"); m_language = ATTR("language"); diff --git a/src/tools/pathTools.cpp b/src/tools/pathTools.cpp index b4fabf450..7680da3eb 100644 --- a/src/tools/pathTools.cpp +++ b/src/tools/pathTools.cpp @@ -305,16 +305,18 @@ std::string kiwix::getFileContent(const std::string& path) bool kiwix::fileExists(const std::string& path) { #ifdef _WIN32 - return PathFileExistsW(Utf8ToWide(path).c_str()); + return (_waccess_s(Utf8ToWide(path).c_str(), 0) == 0); +#else + return (access(path.c_str(), F_OK) == 0); +#endif +} + +bool kiwix::fileReadable(const std::string& path) +{ +#ifdef _WIN32 + return (_waccess_s(Utf8ToWide(path).c_str(), 4) == 0); #else - bool flag = false; - std::fstream fin; - fin.open(path.c_str(), std::ios::in); - if (fin.is_open()) { - flag = true; - } - fin.close(); - return flag; + return (access(path.c_str(), R_OK) == 0); #endif }