Skip to content

Commit 9ed8f1a

Browse files
committed
added the file/directory existence functions from Cppcheck
1 parent 2096a96 commit 9ed8f1a

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

simplecpp.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <stack>
3131
#include <stdexcept>
3232
#include <string>
33+
#include <sys/stat.h>
3334
#if __cplusplus >= 201103L
3435
#ifdef SIMPLECPP_WINDOWS
3536
#include <mutex>
@@ -39,6 +40,12 @@
3940
#include <utility>
4041
#include <vector>
4142

43+
#ifdef _WIN32
44+
using mode_t = unsigned short;
45+
#else
46+
#include <sys/types.h>
47+
#endif
48+
4249
#ifdef SIMPLECPP_WINDOWS
4350
#include <windows.h>
4451
#undef ERROR
@@ -3838,6 +3845,24 @@ std::string simplecpp::getCppStdString(const std::string &std)
38383845
return "";
38393846
}
38403847

3848+
static mode_t file_type(const std::string &path)
3849+
{
3850+
struct stat file_stat;
3851+
if (stat(path.c_str(), &file_stat) == -1)
3852+
return 0;
3853+
return file_stat.st_mode & S_IFMT;
3854+
}
3855+
3856+
bool simplecpp::isFile(const std::string &path)
3857+
{
3858+
return file_type(path) == S_IFREG;
3859+
}
3860+
3861+
bool simplecpp::isDirectory(const std::string &path)
3862+
{
3863+
return file_type(path) == S_IFDIR;
3864+
}
3865+
38413866
#if (__cplusplus < 201103L) && !defined(__APPLE__)
38423867
#undef nullptr
38433868
#endif

simplecpp.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,20 @@ namespace simplecpp {
373373

374374
/** Returns the __cplusplus value for a given standard */
375375
SIMPLECPP_LIB std::string getCppStdString(const std::string &std);
376+
377+
/**
378+
* @brief Checks if given path is a file
379+
* @param path Path to be checked
380+
* @return true if given path is a file
381+
*/
382+
SIMPLECPP_LIB bool isFile(const std::string &path);
383+
384+
/**
385+
* @brief Checks if a given path is a directory
386+
* @param path Path to be checked
387+
* @return true if given path is a directory
388+
*/
389+
SIMPLECPP_LIB bool isDirectory(const std::string &path);
376390
}
377391

378392
#if defined(_MSC_VER)

0 commit comments

Comments
 (0)