summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-06-20 18:42:04 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-06-20 18:42:04 +0000
commit29c17db6508eec1c7c9fb23f3ce863d5ed9bef0e (patch)
tree56cd6dbfb7949281db6828ba10c81c3a6c4fcf69
parenta1694e578492c90c246e59ec861c1a34f8ad7b4d (diff)
downloadexternal_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.h3
-rw-r--r--lib/Support/Unix/PathV2.inc7
-rw-r--r--lib/Support/Windows/PathV2.inc10
-rw-r--r--tools/llvm-ar/llvm-ar.cpp11
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 {