Skip to content

Commit 6fc3ad7

Browse files
committed
added the file/directory existence functions from Cppcheck
1 parent 1b29369 commit 6fc3ad7

2 files changed

Lines changed: 39 additions & 0 deletions

File tree

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
@@ -3756,6 +3763,24 @@ std::string simplecpp::getCppStdString(const std::string &std)
37563763
return "";
37573764
}
37583765

3766+
static mode_t file_type(const std::string &path)
3767+
{
3768+
struct stat file_stat;
3769+
if (stat(path.c_str(), &file_stat) == -1)
3770+
return 0;
3771+
return file_stat.st_mode & S_IFMT;
3772+
}
3773+
3774+
bool simplecpp::isFile(const std::string &path)
3775+
{
3776+
return file_type(path) == S_IFREG;
3777+
}
3778+
3779+
bool simplecpp::isDirectory(const std::string &path)
3780+
{
3781+
return file_type(path) == S_IFDIR;
3782+
}
3783+
37593784
#if (__cplusplus < 201103L) && !defined(__APPLE__)
37603785
#undef nullptr
37613786
#endif

simplecpp.h

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

364364
/** Returns the __cplusplus value for a given standard */
365365
SIMPLECPP_LIB std::string getCppStdString(const std::string &std);
366+
367+
/**
368+
* @brief Checks if given path is a file
369+
* @param path Path to be checked
370+
* @return true if given path is a file
371+
*/
372+
SIMPLECPP_LIB bool isFile(const std::string &path);
373+
374+
/**
375+
* @brief Checks if a given path is a directory
376+
* @param path Path to be checked
377+
* @return true if given path is a directory
378+
*/
379+
SIMPLECPP_LIB bool isDirectory(const std::string &path);
366380
}
367381

368382
#if defined(_MSC_VER)

0 commit comments

Comments
 (0)