Remove last use of PathV1.h from Archive.h

Store the individual fields we need instead of a sys::FileStatus.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184353 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/llvm-ar/Archive.cpp b/tools/llvm-ar/Archive.cpp
index 70fddcf..c733652 100644
--- a/tools/llvm-ar/Archive.cpp
+++ b/tools/llvm-ar/Archive.cpp
@@ -29,7 +29,7 @@
 unsigned
 ArchiveMember::getMemberSize() const {
   // Basically its the file size plus the header size
-  unsigned result =  info.fileSize + sizeof(ArchiveMemberHeader);
+  unsigned result = Size + sizeof(ArchiveMemberHeader);
 
   // If it has a long filename, include the name length
   if (hasLongFilename())
@@ -47,11 +47,11 @@
 ArchiveMember::ArchiveMember()
   : parent(0), path("--invalid--"), flags(0), data(0)
 {
-  info.user = sys::Process::GetCurrentUserId();
-  info.group = sys::Process::GetCurrentGroupId();
-  info.mode = 0777;
-  info.fileSize = 0;
-  info.modTime = sys::TimeValue::now();
+  User = sys::Process::GetCurrentUserId();
+  Group = sys::Process::GetCurrentGroupId();
+  Mode = 0777;
+  Size = 0;
+  ModTime = sys::TimeValue::now();
 }
 
 // This is the constructor that the Archive class uses when it is building or
@@ -117,10 +117,13 @@
     signature = magic.c_str();
     sys::PathWithStatus PWS(path);
     const sys::FileStatus *FSinfo = PWS.getFileStatus(false, ErrMsg);
-    if (FSinfo)
-      info = *FSinfo;
-    else
+    if (!FSinfo)
       return true;
+    User = FSinfo->getUser();
+    Group = FSinfo->getGroup();
+    Mode = FSinfo->getMode();
+    ModTime = FSinfo->getTimestamp();
+    Size = FSinfo->getSize();
   }
 
   // Determine what kind of file it is.
diff --git a/tools/llvm-ar/Archive.h b/tools/llvm-ar/Archive.h
index 2357b13..232a5c2 100644
--- a/tools/llvm-ar/Archive.h
+++ b/tools/llvm-ar/Archive.h
@@ -20,7 +20,7 @@
 #include "llvm/ADT/ilist.h"
 #include "llvm/ADT/ilist_node.h"
 #include "llvm/Support/Path.h"
-#include "llvm/Support/PathV1.h"
+#include "llvm/Support/TimeValue.h"
 #include <map>
 #include <set>
 
@@ -72,28 +72,28 @@
     /// have any applicability on non-Unix systems but is a required component
     /// of the "ar" file format.
     /// @brief Get the user associated with this archive member.
-    unsigned getUser() const             { return info.getUser(); }
+    unsigned getUser() const             { return User; }
 
     /// The "group" is the owning group of the file per Unix security. This
     /// may not have any applicability on non-Unix systems but is a required
     /// component of the "ar" file format.
     /// @brief Get the group associated with this archive member.
-    unsigned getGroup() const            { return info.getGroup(); }
+    unsigned getGroup() const            { return Group; }
 
     /// The "mode" specifies the access permissions for the file per Unix
     /// security. This may not have any applicability on non-Unix systems but is
     /// a required component of the "ar" file format.
     /// @brief Get the permission mode associated with this archive member.
-    unsigned getMode() const             { return info.getMode(); }
+    unsigned getMode() const             { return Mode; }
 
     /// This method returns the time at which the archive member was last
     /// modified when it was not in the archive.
     /// @brief Get the time of last modification of the archive member.
-    sys::TimeValue getModTime() const    { return info.getTimestamp(); }
+    sys::TimeValue getModTime() const    { return ModTime; }
 
     /// @returns the size of the archive member in bytes.
     /// @brief Get the size of the archive member.
-    uint64_t getSize() const             { return info.getSize(); }
+    uint64_t getSize() const             { return Size; }
 
     /// This method returns the total size of the archive member as it
     /// appears on disk. This includes the file content, the header, the
@@ -149,11 +149,15 @@
   /// @name Data
   /// @{
   private:
-    Archive*            parent;   ///< Pointer to parent archive
-    std::string         path;     ///< Path of file containing the member
-    sys::FileStatus     info;     ///< Status info (size,mode,date)
-    unsigned            flags;    ///< Flags about the archive member
-    const char*         data;     ///< Data for the member
+    Archive *parent;  ///< Pointer to parent archive
+    std::string path; ///< Path of file containing the member
+    uint32_t User;
+    uint32_t Group;
+    uint32_t Mode;
+    sys::TimeValue ModTime;
+    uint64_t Size;
+    unsigned flags;   ///< Flags about the archive member
+    const char *data; ///< Data for the member
 
   /// @}
   /// @name Constructors
diff --git a/tools/llvm-ar/ArchiveInternals.h b/tools/llvm-ar/ArchiveInternals.h
index e906d7a..7b73312 100644
--- a/tools/llvm-ar/ArchiveInternals.h
+++ b/tools/llvm-ar/ArchiveInternals.h
@@ -16,6 +16,7 @@
 
 #include "Archive.h"
 #include "llvm/ADT/StringExtras.h"
+#include "llvm/Support/PathV1.h"
 #include "llvm/Support/TimeValue.h"
 #include <cstring>
 
diff --git a/tools/llvm-ar/ArchiveReader.cpp b/tools/llvm-ar/ArchiveReader.cpp
index 25f3c2f..7b363a1 100644
--- a/tools/llvm-ar/ArchiveReader.cpp
+++ b/tools/llvm-ar/ArchiveReader.cpp
@@ -175,13 +175,13 @@
   // Fill in fields of the ArchiveMember
   member->parent = this;
   member->path = pathname;
-  member->info.fileSize = MemberSize;
-  member->info.modTime.fromEpochTime(atoi(Hdr->date));
+  member->Size = MemberSize;
+  member->ModTime.fromEpochTime(atoi(Hdr->date));
   unsigned int mode;
   sscanf(Hdr->mode, "%o", &mode);
-  member->info.mode = mode;
-  member->info.user = atoi(Hdr->uid);
-  member->info.group = atoi(Hdr->gid);
+  member->Mode = mode;
+  member->User = atoi(Hdr->uid);
+  member->Group = atoi(Hdr->gid);
   member->flags = flags;
   member->data = At;
 
diff --git a/tools/llvm-ar/ArchiveWriter.cpp b/tools/llvm-ar/ArchiveWriter.cpp
index 7b5574e..5b74b26 100644
--- a/tools/llvm-ar/ArchiveWriter.cpp
+++ b/tools/llvm-ar/ArchiveWriter.cpp
@@ -172,7 +172,11 @@
     delete mbr;
     return true;
   }
-  mbr->info = *FSInfo;
+  mbr->User = FSInfo->getUser();
+  mbr->Group = FSInfo->getGroup();
+  mbr->Mode = FSInfo->getMode();
+  mbr->ModTime = FSInfo->getTimestamp();
+  mbr->Size = FSInfo->getSize();
 
   unsigned flags = 0;
   bool hasSlash = filePath.str().find('/') != std::string::npos;
diff --git a/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp
index 03bb36b..85f3517 100644
--- a/tools/llvm-ar/llvm-ar.cpp
+++ b/tools/llvm-ar/llvm-ar.cpp
@@ -19,6 +19,7 @@
 #include "llvm/Support/FileSystem.h"
 #include "llvm/Support/Format.h"
 #include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/PathV1.h"
 #include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/Signals.h"
 #include "llvm/Support/raw_ostream.h"