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
This commit is contained in:
Rafael Espindola 2013-06-19 19:17:15 +00:00
parent 13f4fd77b9
commit 27ff1f3f7d
2 changed files with 10 additions and 13 deletions

View File

@ -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

View File

@ -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;