summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-06-20 22:02:10 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-06-20 22:02:10 +0000
commitbdae6fa82ce92c0782dc291fb75e207398a26c68 (patch)
tree44fe2f1e5d5b13bcee91debfa34f0709456eb9b7
parent4010e438100fedeacd36ecd2385adabc02b6f236 (diff)
downloadllvm-bdae6fa82ce92c0782dc291fb75e207398a26c68.tar.gz
llvm-bdae6fa82ce92c0782dc291fb75e207398a26c68.tar.bz2
llvm-bdae6fa82ce92c0782dc291fb75e207398a26c68.tar.xz
Remove last use of PathV1.h from Archive.cpp.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184484 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Support/FileSystem.h14
-rw-r--r--lib/Support/Unix/PathV2.inc2
-rw-r--r--tools/llvm-ar/Archive.cpp23
3 files changed, 30 insertions, 9 deletions
diff --git a/include/llvm/Support/FileSystem.h b/include/llvm/Support/FileSystem.h
index b660a5b161..474e01ce36 100644
--- a/include/llvm/Support/FileSystem.h
+++ b/include/llvm/Support/FileSystem.h
@@ -153,6 +153,8 @@ class file_status
dev_t fs_st_dev;
ino_t fs_st_ino;
time_t fs_st_mtime;
+ uid_t fs_st_uid;
+ gid_t fs_st_gid;
#elif defined (LLVM_ON_WIN32)
uint32_t LastWriteTimeHigh;
uint32_t LastWriteTimeLow;
@@ -177,6 +179,18 @@ public:
perms permissions() const { return Perms; }
TimeValue getLastModificationTime() const;
+ #if defined(LLVM_ON_UNIX)
+ uint32_t getUser() const { return fs_st_uid; }
+ uint32_t getGroup() const { return fs_st_gid; }
+ #elif defined (LLVM_ON_WIN32)
+ uint32_t getUser() const {
+ return 9999; // Not applicable to Windows, so...
+ }
+ uint32_t getGroup() const {
+ return 9999; // Not applicable to Windows, so...
+ }
+ #endif
+
// setters
void type(file_type v) { Type = v; }
void permissions(perms p) { Perms = p; }
diff --git a/lib/Support/Unix/PathV2.inc b/lib/Support/Unix/PathV2.inc
index 4c76f28c66..b036c74ad1 100644
--- a/lib/Support/Unix/PathV2.inc
+++ b/lib/Support/Unix/PathV2.inc
@@ -408,6 +408,8 @@ 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;
+ result.fs_st_uid = status.st_uid;
+ result.fs_st_gid = status.st_gid;
return error_code::success();
}
diff --git a/tools/llvm-ar/Archive.cpp b/tools/llvm-ar/Archive.cpp
index 520e410e1a..8d21481b57 100644
--- a/tools/llvm-ar/Archive.cpp
+++ b/tools/llvm-ar/Archive.cpp
@@ -18,7 +18,6 @@
#include "llvm/IR/Module.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/MemoryBuffer.h"
-#include "llvm/Support/PathV1.h"
#include "llvm/Support/Process.h"
#include "llvm/Support/system_error.h"
#include <cstring>
@@ -109,15 +108,21 @@ bool ArchiveMember::replaceWith(StringRef newFile, std::string* ErrMsg) {
if (!signature) {
sys::fs::get_magic(path, magic.capacity(), magic);
signature = magic.c_str();
- sys::PathWithStatus PWS(path);
- const sys::FileStatus *FSinfo = PWS.getFileStatus(false, ErrMsg);
- if (!FSinfo)
+
+ sys::fs::file_status Status;
+ error_code EC = sys::fs::status(path, Status);
+ if (EC)
+ return true;
+
+ User = Status.getUser();
+ Group = Status.getGroup();
+ Mode = Status.permissions();
+ ModTime = Status.getLastModificationTime();
+
+ // FIXME: On posix this is a second stat.
+ EC = sys::fs::file_size(path, Size);
+ if (EC)
return true;
- User = FSinfo->getUser();
- Group = FSinfo->getGroup();
- Mode = FSinfo->getMode();
- ModTime = FSinfo->getTimestamp();
- Size = FSinfo->getSize();
}
// Determine what kind of file it is.