Remove last use of PathV1.h from Archive.cpp.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 20 Jun 2013 22:02:10 +0000 (22:02 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 20 Jun 2013 22:02:10 +0000 (22:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184484 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/FileSystem.h
lib/Support/Unix/PathV2.inc
tools/llvm-ar/Archive.cpp

index b660a5b161839125d65ef1a4f846f9779274f179..474e01ce360f7e0b33a54d6e792c2b8e008e18d3 100644 (file)
@@ -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; }
index 4c76f28c66c2f27450419b846935fa8a54fd71c8..b036c74ad1657d004a132221f2fdf24616a2d3d8 100644 (file)
@@ -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();
 }
index 520e410e1aca60fd5bad86cb637c0e08ee259d9f..8d21481b57bd48dc5d866974c40449c361b1f3a7 100644 (file)
@@ -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.