Eliminate some redundancy by relying on raw_fd_ostream to handle "-"

properly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111373 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman
2010-08-18 17:55:15 +00:00
parent 4931b312c0
commit 18cde6df91

View File

@@ -127,36 +127,13 @@ GetFileNameRoot(const std::string &InputFilename) {
static formatted_raw_ostream *GetOutputStream(const char *TargetName,
Triple::OSType OS,
const char *ProgName) {
if (!OutputFilename.empty()) {
// Make sure that the Out file gets unlinked from the disk if we get a
// SIGINT
if (OutputFilename != "-")
sys::RemoveFileOnSignal(sys::Path(OutputFilename));
std::string error;
raw_fd_ostream *FDOut =
new raw_fd_ostream(OutputFilename.c_str(), error,
raw_fd_ostream::F_Binary);
if (!error.empty()) {
errs() << error << '\n';
delete FDOut;
return 0;
}
formatted_raw_ostream *Out =
new formatted_raw_ostream(*FDOut, formatted_raw_ostream::DELETE_STREAM);
return Out;
}
if (InputFilename == "-") {
// If we don't yet have an output filename, make one.
if (OutputFilename.empty()) {
if (InputFilename == "-")
OutputFilename = "-";
return new formatted_raw_ostream(outs(),
formatted_raw_ostream::PRESERVE_STREAM);
}
else {
OutputFilename = GetFileNameRoot(InputFilename);
bool Binary = false;
switch (FileType) {
default: assert(0 && "Unknown file type");
case TargetMachine::CGFT_AssemblyFile:
@@ -175,18 +152,32 @@ static formatted_raw_ostream *GetOutputStream(const char *TargetName,
OutputFilename += ".obj";
else
OutputFilename += ".o";
Binary = true;
break;
case TargetMachine::CGFT_Null:
OutputFilename += ".null";
break;
}
}
}
// Decide if we need "binary" output.
bool Binary = false;
switch (FileType) {
default: assert(0 && "Unknown file type");
case TargetMachine::CGFT_AssemblyFile:
break;
case TargetMachine::CGFT_ObjectFile:
case TargetMachine::CGFT_Null:
Binary = true;
break;
}
// Make sure that the Out file gets unlinked from the disk if we get a
// SIGINT
if (OutputFilename != "-")
sys::RemoveFileOnSignal(sys::Path(OutputFilename));
// Open the file.
std::string error;
unsigned OpenFlags = 0;
if (Binary) OpenFlags |= raw_fd_ostream::F_Binary;