diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-07-08 16:16:51 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-07-08 16:16:51 +0000 |
commit | 35637fc6233c3ee275d497286241795986b6e432 (patch) | |
tree | 23f66548d1e33c4830a398f921705a99a35e7807 /tools | |
parent | 221f6d777e56517591766a582f542af92d1f19c9 (diff) | |
download | llvm-35637fc6233c3ee275d497286241795986b6e432.tar.gz llvm-35637fc6233c3ee275d497286241795986b6e432.tar.bz2 llvm-35637fc6233c3ee275d497286241795986b6e432.tar.xz |
Create files with the correct permission instead of changing it afterwards.
No intended functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185832 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r-- | tools/llvm-ar/llvm-ar.cpp | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp index a9297eb057..bf9447bccf 100644 --- a/tools/llvm-ar/llvm-ar.cpp +++ b/tools/llvm-ar/llvm-ar.cpp @@ -404,7 +404,10 @@ doExtract(std::string* ErrMsg) { OpenFlags |= O_BINARY; #endif - int FD = open(I->getPath().str().c_str(), OpenFlags, 0664); + // Retain the original mode. + sys::fs::perms Mode = sys::fs::perms(I->getMode()); + + int FD = open(I->getPath().str().c_str(), OpenFlags, Mode); if (FD < 0) return true; @@ -419,17 +422,11 @@ doExtract(std::string* ErrMsg) { file.write(data, len); } - // Retain the original mode. - sys::fs::perms Mode = sys::fs::perms(I->getMode()); - // FIXME: at least on posix we should be able to reuse FD (fchmod). - error_code EC = sys::fs::permissions(I->getPath(), Mode); - if (EC) - fail(EC.message()); - // If we're supposed to retain the original modification times, etc. do so // now. if (OriginalDates) { - EC = sys::fs::setLastModificationAndAccessTime(FD, I->getModTime()); + error_code EC = + sys::fs::setLastModificationAndAccessTime(FD, I->getModTime()); if (EC) fail(EC.message()); } |