diff options
author | Brad King <brad.king@kitware.com> | 2004-10-15 13:23:14 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2004-10-15 13:23:14 (GMT) |
commit | b4176dcab91df1d7f28ee41e1f52eb6ae9accbf4 (patch) | |
tree | cb4c2b3b2f1905592f2c8ab16e79cd5a0a0cc16e | |
parent | 4b20a7ad2d7ab259d75ac35309c8c27fbdc62f40 (diff) | |
download | CMake-b4176dcab91df1d7f28ee41e1f52eb6ae9accbf4.zip CMake-b4176dcab91df1d7f28ee41e1f52eb6ae9accbf4.tar.gz CMake-b4176dcab91df1d7f28ee41e1f52eb6ae9accbf4.tar.bz2 |
ENH: Added FileTimeCompare method to compare file modification times. Currently the resolution is limited to one second.
-rw-r--r-- | Source/cmSystemTools.cxx | 30 | ||||
-rw-r--r-- | Source/cmSystemTools.h | 6 |
2 files changed, 36 insertions, 0 deletions
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index d9f51f8..1e8bf2e 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -1317,3 +1317,33 @@ bool cmSystemTools::PutEnv(const char* value) return ret == 0; } +bool cmSystemTools::FileTimeCompare(const char* f1, const char* f2, + int* result) +{ + struct stat stat1, stat2; + if(stat(f1, &stat1) == 0 && stat(f2, &stat2) == 0) + { + *result = 0; + if(stat1.st_mtime < stat2.st_mtime) + { + *result = -1; + } + else if(stat1.st_mtime > stat2.st_mtime) + { + *result = 1; + } +#if 0 + // TODO: Support resolution higher than one second. + // Use st_mtim.tv_nsec if available and GetFileTime on Windows. + else if(stat1.st_mtim.tv_nsec < stat2.st_mtim.tv_nsec) + { + *result = 1; + } +#endif + return true; + } + else + { + return false; + } +} diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h index 43a5daf..a064a31 100644 --- a/Source/cmSystemTools.h +++ b/Source/cmSystemTools.h @@ -290,6 +290,12 @@ public: of the form var=value */ static bool PutEnv(const char* value); + /** Compare file modification times. + Returns true for successful comparison and false for error. + When true is returned, result has -1, 0, +1 for + f1 older, same, or newer than f2. */ + static bool FileTimeCompare(const char* f1, const char* f2, + int* result); private: static bool s_ForceUnixPaths; static bool s_RunCommandHideConsole; |