summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-06-19 19:17:15 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-06-19 19:17:15 +0000
commit27ff1f3f7d9a20e02e00fe88dbb7541ce066d33c (patch)
tree974fbacb7d720dcf11a05276468ab5f10a531eeb /tools
parent13f4fd77b96c39b3836d1186953003ddfea3a646 (diff)
downloadllvm-27ff1f3f7d9a20e02e00fe88dbb7541ce066d33c.tar.gz
llvm-27ff1f3f7d9a20e02e00fe88dbb7541ce066d33c.tar.bz2
llvm-27ff1f3f7d9a20e02e00fe88dbb7541ce066d33c.tar.xz
Always set the mode.
This matches GNU ar behavior. Also remove the now unused getFileStatus method. Not sure how to add a test, it would have to run ls -l or something like that. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184337 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r--tools/llvm-ar/Archive.h9
-rw-r--r--tools/llvm-ar/llvm-ar.cpp14
2 files changed, 10 insertions, 13 deletions
diff --git a/tools/llvm-ar/Archive.h b/tools/llvm-ar/Archive.h
index 79933ef1b8..2357b13d63 100644
--- a/tools/llvm-ar/Archive.h
+++ b/tools/llvm-ar/Archive.h
@@ -137,15 +137,6 @@ class ArchiveMember : public ilist_node<ArchiveMember> {
/// @brief Determine if the member has a long file name
bool hasLongFilename() const { return flags&HasLongFilenameFlag; }
- /// This method returns the status info (like Unix stat(2)) for the archive
- /// member. The status info provides the file's size, permissions, and
- /// modification time. The contents of the Path::StatusInfo structure, other
- /// than the size and modification time, may not have utility on non-Unix
- /// systems.
- /// @returns the status info for the archive member
- /// @brief Obtain the status info for the archive member
- const sys::FileStatus &getFileStatus() const { return info; }
-
/// This method causes the archive member to be replaced with the contents
/// of the file specified by \p File. The contents of \p this will be
/// updated to reflect the new data from \p File. The \p File must exist and
diff --git a/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp
index 4061551411..03bb36b116 100644
--- a/tools/llvm-ar/llvm-ar.cpp
+++ b/tools/llvm-ar/llvm-ar.cpp
@@ -440,12 +440,18 @@ doExtract(std::string* ErrMsg) {
file.write(data,len);
file.close();
+ sys::PathWithStatus PWS(I->getPath());
+ sys::FileStatus Status = *PWS.getFileStatus();
+
+ // Retain the original mode.
+ Status.mode = I->getMode();
+
// If we're supposed to retain the original modification times, etc. do so
// now.
- if (OriginalDates) {
- sys::PathWithStatus PWS(I->getPath());
- PWS.setStatusInfoOnDisk(I->getFileStatus());
- }
+ if (OriginalDates)
+ Status.modTime = I->getModTime();
+
+ PWS.setStatusInfoOnDisk(Status);
}
}
return false;