]> git.localhorst.tv Git - blank.git/commitdiff
function to get mtime
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Fri, 9 Oct 2015 08:32:03 +0000 (10:32 +0200)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Fri, 9 Oct 2015 08:32:03 +0000 (10:32 +0200)
src/io/filesystem.cpp
src/io/filesystem.hpp

index 8a06d1c9ef8b64051c5596d687f8e5fd833e5423..1fd94a0ae152a4313bc61d707ad012fc4f942c1a 100644 (file)
@@ -9,36 +9,61 @@
 
 namespace blank {
 
-bool is_dir(const char *path) {
+namespace {
 #ifdef _WIN32
-       struct _stat info;
-       if (_stat(path, &info) != 0) {
-               return false;
+       using Stat = struct _stat;
+       int do_stat(const char *path, Stat &info) {
+               return _stat(path, &info);
+       }
+       bool is_dir(const Stat &info) {
+               return (info.st_mode & _S_IFDIR) != 0;
+       }
+       bool is_file(const Stat &info) {
+               return (info.st_mode & _S_IFEG) != 0;
        }
-       return (info.st_mode & _S_IFDIR) != 0;
 #else
-       struct stat info;
-       if (stat(path, &info) != 0) {
-               return false;
+       using Stat = struct stat;
+       int do_stat(const char *path, Stat &info) {
+               return stat(path, &info);
+       }
+       bool is_dir(const Stat &info) {
+               return S_ISDIR(info.st_mode);
        }
-       return S_ISDIR(info.st_mode);
+       bool is_file(const Stat &info) {
+               return S_ISREG(info.st_mode);
+       }
+#endif
+       std::time_t get_mtime(const Stat &info) {
+#ifdef __APPLE__
+               return info.st_mtimespec.tv_sec;
+#else
+       return info.st_mtime;
 #endif
+       }
 }
 
-bool is_file(const char *path) {
-#ifdef _WIN32
-       struct _stat info;
-       if (_stat(path, &info) != 0) {
+bool is_dir(const char *path) {
+       Stat info;
+       if (do_stat(path, info) != 0) {
                return false;
        }
-       return (info.st_mode & _S_IFREG) != 0;
-#else
-       struct stat info;
-       if (stat(path, &info) != 0) {
+       return is_dir(info);
+}
+
+bool is_file(const char *path) {
+       Stat info;
+       if (do_stat(path, info) != 0) {
                return false;
        }
-       return S_ISREG(info.st_mode);
-#endif
+       return is_file(info);
+}
+
+std::time_t file_mtime(const char *path) {
+       Stat info;
+       if (do_stat(path, info) != 0) {
+               return 0;
+       }
+       return get_mtime(info);
 }
 
 
index 3829e0deab46a2f0c316f7f2496f744b328c4bea..b69352a4ba962a4292031ef1662fd5a2274561f4 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef BLANK_IO_FILESYSTEM_HPP_
 #define BLANK_IO_FILESYSTEM_HPP_
 
+#include <ctime>
 #include <string>
 
 
@@ -16,6 +17,11 @@ bool is_file(const char *);
 inline bool is_file(const std::string &s) {
        return is_file(s.c_str());
 }
+/// get timestamp of last modification
+std::time_t file_mtime(const char *);
+inline std::time_t file_mtime(const std::string &s) {
+       return file_mtime(s.c_str());
+}
 
 /// create given directory
 /// @return true if the directory was created