X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fio%2Ffilesystem.cpp;h=1fd94a0ae152a4313bc61d707ad012fc4f942c1a;hb=33b37e7242e4cbfa76e4a0d6e5bb54223b541162;hp=8a06d1c9ef8b64051c5596d687f8e5fd833e5423;hpb=ede25c0a2f59e21521d1cd962e6ea9d78169ca12;p=blank.git diff --git a/src/io/filesystem.cpp b/src/io/filesystem.cpp index 8a06d1c..1fd94a0 100644 --- a/src/io/filesystem.cpp +++ b/src/io/filesystem.cpp @@ -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); }