diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-06-20 18:42:04 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-06-20 18:42:04 +0000 |
commit | 29c17db6508eec1c7c9fb23f3ce863d5ed9bef0e (patch) | |
tree | 56cd6dbfb7949281db6828ba10c81c3a6c4fcf69 | |
parent | a1694e578492c90c246e59ec861c1a34f8ad7b4d (diff) | |
download | external_llvm-29c17db6508eec1c7c9fb23f3ce863d5ed9bef0e.zip external_llvm-29c17db6508eec1c7c9fb23f3ce863d5ed9bef0e.tar.gz external_llvm-29c17db6508eec1c7c9fb23f3ce863d5ed9bef0e.tar.bz2 |
Add support for getting the last modification time from a file_status.
Use that in llvm-ar.cpp to replace a use of sys::PathWithStatus.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184450 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Support/FileSystem.h | 3 | ||||
-rw-r--r-- | lib/Support/Unix/PathV2.inc | 7 | ||||
-rw-r--r-- | lib/Support/Windows/PathV2.inc | 10 | ||||
-rw-r--r-- | tools/llvm-ar/llvm-ar.cpp | 11 |
4 files changed, 25 insertions, 6 deletions
diff --git a/include/llvm/Support/FileSystem.h b/include/llvm/Support/FileSystem.h index 6b3b126..c9ecc30 100644 --- a/include/llvm/Support/FileSystem.h +++ b/include/llvm/Support/FileSystem.h @@ -33,6 +33,7 @@ #include "llvm/ADT/Twine.h" #include "llvm/Support/DataTypes.h" #include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/TimeValue.h" #include "llvm/Support/system_error.h" #include <ctime> #include <iterator> @@ -151,6 +152,7 @@ class file_status #if defined(LLVM_ON_UNIX) dev_t fs_st_dev; ino_t fs_st_ino; + time_t fs_st_mtime; #elif defined (LLVM_ON_WIN32) uint32_t LastWriteTimeHigh; uint32_t LastWriteTimeLow; @@ -177,6 +179,7 @@ public: // setters void type(file_type v) { Type = v; } void permissions(perms p) { Perms = p; } + TimeValue getLastModificationTime(); }; /// file_magic - An "enum class" enumeration of file types based on magic (the first diff --git a/lib/Support/Unix/PathV2.inc b/lib/Support/Unix/PathV2.inc index 39b3312..4b922da 100644 --- a/lib/Support/Unix/PathV2.inc +++ b/lib/Support/Unix/PathV2.inc @@ -110,6 +110,12 @@ namespace llvm { namespace sys { namespace fs { +TimeValue file_status::getLastModificationTime() { + TimeValue Ret; + Ret.fromEpochTime(fs_st_mtime); + return Ret; +} + error_code current_path(SmallVectorImpl<char> &result) { #ifdef MAXPATHLEN result.reserve(MAXPATHLEN); @@ -401,6 +407,7 @@ error_code status(const Twine &path, file_status &result) { result.fs_st_dev = status.st_dev; result.fs_st_ino = status.st_ino; + result.fs_st_mtime = status.st_mtime; return error_code::success(); } diff --git a/lib/Support/Windows/PathV2.inc b/lib/Support/Windows/PathV2.inc index 8815b0e..006e31a 100644 --- a/lib/Support/Windows/PathV2.inc +++ b/lib/Support/Windows/PathV2.inc @@ -128,6 +128,16 @@ namespace llvm { namespace sys { namespace fs { +TimeValue file_status::getLastModificationTime() { + ULARGE_INTEGER UI; + UI.LowPart = LastWriteTimeLow; + UI.HighPart = LastWriteTimeHigh; + + TimeValue Ret; + Ret.fromWin32Time(UI.QuadPart); + return Ret; +} + error_code current_path(SmallVectorImpl<char> &result) { SmallVector<wchar_t, 128> cur_path; cur_path.reserve(128); diff --git a/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp index 4c98671..e422f31 100644 --- a/tools/llvm-ar/llvm-ar.cpp +++ b/tools/llvm-ar/llvm-ar.cpp @@ -583,15 +583,14 @@ doReplaceOrInsert(std::string* ErrMsg) { } if (found != remaining.end()) { - std::string Err; - sys::PathWithStatus PwS(*found); - const sys::FileStatus *si = PwS.getFileStatus(false, &Err); - if (!si) + sys::fs::file_status Status; + error_code EC = sys::fs::status(*found, Status); + if (EC) return true; - if (!si->isDir) { + if (!sys::fs::is_directory(Status)) { if (OnlyUpdate) { // Replace the item only if it is newer. - if (si->modTime > I->getModTime()) + if (Status.getLastModificationTime() > I->getModTime()) if (I->replaceWith(*found, ErrMsg)) return true; } else { |