aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools')
-rw-r--r--llvm/tools/llvm-objcopy/llvm-objcopy.cpp32
-rw-r--r--llvm/tools/llvm-objcopy/llvm-objcopy.h8
2 files changed, 14 insertions, 26 deletions
diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
index bc32473..68b5e97 100644
--- a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
+++ b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
@@ -58,8 +58,7 @@ namespace llvm {
namespace objcopy {
Error writeToFile(StringRef OutputFileName,
- std::function<Error(raw_ostream &)> Write, bool KeepOwnership,
- unsigned UserID, unsigned GroupID) {
+ std::function<Error(raw_ostream &)> Write) {
if (OutputFileName == "-")
return Write(outs());
@@ -74,15 +73,6 @@ Error writeToFile(StringRef OutputFileName,
if (!Temp)
return createFileError(OutputFileName, Temp.takeError());
-#ifndef _WIN32
- // Try to preserve file ownership if requested.
- if (KeepOwnership) {
- sys::fs::file_status Stat;
- if (!sys::fs::status(Temp->FD, Stat) && Stat.getUser() == 0)
- sys::fs::changeFileOwnership(Temp->FD, UserID, GroupID);
- }
-#endif
-
raw_fd_ostream Out(Temp->FD, false);
if (Error E = Write(Out)) {
@@ -156,9 +146,9 @@ static Error deepWriteArchive(StringRef ArcName,
// now in-memory buffers can not be completely avoided since
// NewArchiveMember still requires them even though writeArchive does not
// write them on disk.
- Expected<std::unique_ptr<FileOutputBuffer>> FB = FileOutputBuffer::create(
- Member.MemberName, Member.Buf->getBufferSize(),
- FileOutputBuffer::F_executable | FileOutputBuffer::F_keep_ownership);
+ Expected<std::unique_ptr<FileOutputBuffer>> FB =
+ FileOutputBuffer::create(Member.MemberName, Member.Buf->getBufferSize(),
+ FileOutputBuffer::F_executable);
if (!FB)
return FB.takeError();
std::copy(Member.Buf->getBufferStart(), Member.Buf->getBufferEnd(),
@@ -306,6 +296,12 @@ static Error restoreStatOnFile(StringRef Filename,
if (auto EC = sys::fs::setPermissions(FD, Perm))
#endif
return createFileError(Filename, EC);
+
+#ifndef _WIN32
+ // Keep ownership if llvm-objcopy is called under root.
+ if (Config.InputFilename == Config.OutputFilename && OStat.getUser() == 0)
+ sys::fs::changeFileOwnership(FD, Stat.getUser(), Stat.getGroup());
+#endif
}
if (auto EC = sys::Process::SafelyCloseFileDescriptor(FD))
@@ -360,14 +356,10 @@ static Error executeObjcopy(CopyConfig &Config) {
return E;
} else {
if (Error E = writeToFile(
- Config.OutputFilename,
- [&](raw_ostream &OutFile) -> Error {
+ Config.OutputFilename, [&](raw_ostream &OutFile) -> Error {
return executeObjcopyOnBinary(
Config, *BinaryOrErr.get().getBinary(), OutFile);
- },
- Config.InputFilename != "-" &&
- Config.InputFilename == Config.OutputFilename,
- Stat.getUser(), Stat.getGroup()))
+ }))
return E;
}
}
diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.h b/llvm/tools/llvm-objcopy/llvm-objcopy.h
index 3d080a011..98a43e5 100644
--- a/llvm/tools/llvm-objcopy/llvm-objcopy.h
+++ b/llvm/tools/llvm-objcopy/llvm-objcopy.h
@@ -31,13 +31,9 @@ createNewArchiveMembers(CopyConfig &Config, const object::Archive &Ar);
/// \p OutputFileName: std::outs for the "-", raw_null_ostream for
/// the "/dev/null", temporary file in the same directory as the final output
/// file for other names. The final output file is atomically replaced with
-/// the temporary file after \p Write handler is finished. \p KeepOwnership
-/// used to setting specified \p UserID and \p GroupID for the resulting file
-/// if writeToFile is called under /root.
+/// the temporary file after \p Write handler is finished.
Error writeToFile(StringRef OutputFileName,
- std::function<Error(raw_ostream &)> Write,
- bool KeepOwnership = false, unsigned UserID = 0,
- unsigned GroupID = 0);
+ std::function<Error(raw_ostream &)> Write);
} // end namespace objcopy
} // end namespace llvm