mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-19 02:42:58 +00:00
Use binary mode for reading/writing bytecode files
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19751 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
695c9bdbd0
commit
5fb6ed4ae6
@ -375,7 +375,9 @@ Archive::writeToDisk(bool CreateSymbolTable, bool TruncateNames, bool Compress){
|
|||||||
// Ensure we can remove the temporary even in the face of an exception
|
// Ensure we can remove the temporary even in the face of an exception
|
||||||
try {
|
try {
|
||||||
// Create archive file for output.
|
// Create archive file for output.
|
||||||
std::ofstream ArchiveFile(TmpArchive.c_str());
|
std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
|
||||||
|
std::ios::binary;
|
||||||
|
std::ofstream ArchiveFile(TmpArchive.c_str(), io_mode);
|
||||||
|
|
||||||
// Check for errors opening or creating archive file.
|
// Check for errors opening or creating archive file.
|
||||||
if ( !ArchiveFile.is_open() || ArchiveFile.bad() ) {
|
if ( !ArchiveFile.is_open() || ArchiveFile.bad() ) {
|
||||||
@ -413,7 +415,7 @@ Archive::writeToDisk(bool CreateSymbolTable, bool TruncateNames, bool Compress){
|
|||||||
const char* base = (const char*) arch.map();
|
const char* base = (const char*) arch.map();
|
||||||
|
|
||||||
// Open the final file to write and check it.
|
// Open the final file to write and check it.
|
||||||
std::ofstream FinalFile(archPath.c_str());
|
std::ofstream FinalFile(archPath.c_str(), io_mode);
|
||||||
if ( !FinalFile.is_open() || FinalFile.bad() ) {
|
if ( !FinalFile.is_open() || FinalFile.bad() ) {
|
||||||
throw std::string("Error opening archive file: ") + archPath.toString();
|
throw std::string("Error opening archive file: ") + archPath.toString();
|
||||||
}
|
}
|
||||||
|
@ -375,7 +375,9 @@ Archive::writeToDisk(bool CreateSymbolTable, bool TruncateNames, bool Compress){
|
|||||||
// Ensure we can remove the temporary even in the face of an exception
|
// Ensure we can remove the temporary even in the face of an exception
|
||||||
try {
|
try {
|
||||||
// Create archive file for output.
|
// Create archive file for output.
|
||||||
std::ofstream ArchiveFile(TmpArchive.c_str());
|
std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
|
||||||
|
std::ios::binary;
|
||||||
|
std::ofstream ArchiveFile(TmpArchive.c_str(), io_mode);
|
||||||
|
|
||||||
// Check for errors opening or creating archive file.
|
// Check for errors opening or creating archive file.
|
||||||
if ( !ArchiveFile.is_open() || ArchiveFile.bad() ) {
|
if ( !ArchiveFile.is_open() || ArchiveFile.bad() ) {
|
||||||
@ -413,7 +415,7 @@ Archive::writeToDisk(bool CreateSymbolTable, bool TruncateNames, bool Compress){
|
|||||||
const char* base = (const char*) arch.map();
|
const char* base = (const char*) arch.map();
|
||||||
|
|
||||||
// Open the final file to write and check it.
|
// Open the final file to write and check it.
|
||||||
std::ofstream FinalFile(archPath.c_str());
|
std::ofstream FinalFile(archPath.c_str(), io_mode);
|
||||||
if ( !FinalFile.is_open() || FinalFile.bad() ) {
|
if ( !FinalFile.is_open() || FinalFile.bad() ) {
|
||||||
throw std::string("Error opening archive file: ") + archPath.toString();
|
throw std::string("Error opening archive file: ") + archPath.toString();
|
||||||
}
|
}
|
||||||
|
@ -27,13 +27,14 @@ using namespace llvm;
|
|||||||
///
|
///
|
||||||
bool llvm::DiffFiles(const std::string &FileA, const std::string &FileB,
|
bool llvm::DiffFiles(const std::string &FileA, const std::string &FileB,
|
||||||
std::string *Error) {
|
std::string *Error) {
|
||||||
std::ifstream FileAStream(FileA.c_str());
|
std::ios::openmode io_mode = std::ios::in | std::ios::binary;
|
||||||
|
std::ifstream FileAStream(FileA.c_str(), io_mode);
|
||||||
if (!FileAStream) {
|
if (!FileAStream) {
|
||||||
if (Error) *Error = "Couldn't open file '" + FileA + "'";
|
if (Error) *Error = "Couldn't open file '" + FileA + "'";
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ifstream FileBStream(FileB.c_str());
|
std::ifstream FileBStream(FileB.c_str(), io_mode);
|
||||||
if (!FileBStream) {
|
if (!FileBStream) {
|
||||||
if (Error) *Error = "Couldn't open file '" + FileB + "'";
|
if (Error) *Error = "Couldn't open file '" + FileB + "'";
|
||||||
return true;
|
return true;
|
||||||
|
@ -78,17 +78,17 @@ namespace { // Anonymous namespace for class
|
|||||||
|
|
||||||
Verifier()
|
Verifier()
|
||||||
: Broken(false), RealPass(true), action(AbortProcessAction),
|
: Broken(false), RealPass(true), action(AbortProcessAction),
|
||||||
DS(0), msgs( std::ios_base::app | std::ios_base::out ) {}
|
DS(0), msgs( std::ios::app | std::ios::out ) {}
|
||||||
Verifier( VerifierFailureAction ctn )
|
Verifier( VerifierFailureAction ctn )
|
||||||
: Broken(false), RealPass(true), action(ctn), DS(0),
|
: Broken(false), RealPass(true), action(ctn), DS(0),
|
||||||
msgs( std::ios_base::app | std::ios_base::out ) {}
|
msgs( std::ios::app | std::ios::out ) {}
|
||||||
Verifier(bool AB )
|
Verifier(bool AB )
|
||||||
: Broken(false), RealPass(true),
|
: Broken(false), RealPass(true),
|
||||||
action( AB ? AbortProcessAction : PrintMessageAction), DS(0),
|
action( AB ? AbortProcessAction : PrintMessageAction), DS(0),
|
||||||
msgs( std::ios_base::app | std::ios_base::out ) {}
|
msgs( std::ios::app | std::ios::out ) {}
|
||||||
Verifier(DominatorSet &ds)
|
Verifier(DominatorSet &ds)
|
||||||
: Broken(false), RealPass(false), action(PrintMessageAction),
|
: Broken(false), RealPass(false), action(PrintMessageAction),
|
||||||
DS(&ds), msgs( std::ios_base::app | std::ios_base::out ) {}
|
DS(&ds), msgs( std::ios::app | std::ios::out ) {}
|
||||||
|
|
||||||
|
|
||||||
bool doInitialization(Module &M) {
|
bool doInitialization(Module &M) {
|
||||||
|
@ -15,6 +15,12 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// Note: as a short term hack, the old Unix-specific code and platform-
|
||||||
|
// independent code co-exist via conditional compilation until it is verified
|
||||||
|
// that the new code works correctly on Unix.
|
||||||
|
|
||||||
|
#define PLATFORMINDEPENDENT
|
||||||
|
|
||||||
#include "BugDriver.h"
|
#include "BugDriver.h"
|
||||||
#include "llvm/Module.h"
|
#include "llvm/Module.h"
|
||||||
#include "llvm/PassManager.h"
|
#include "llvm/PassManager.h"
|
||||||
@ -24,9 +30,11 @@
|
|||||||
#include "llvm/Support/FileUtilities.h"
|
#include "llvm/Support/FileUtilities.h"
|
||||||
#include "llvm/System/Path.h"
|
#include "llvm/System/Path.h"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
#ifndef PLATFORMINDEPENDENT
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
|
#endif
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
/// writeProgramToFile - This writes the current "Program" to the named bytecode
|
/// writeProgramToFile - This writes the current "Program" to the named bytecode
|
||||||
@ -34,7 +42,9 @@ using namespace llvm;
|
|||||||
///
|
///
|
||||||
bool BugDriver::writeProgramToFile(const std::string &Filename,
|
bool BugDriver::writeProgramToFile(const std::string &Filename,
|
||||||
Module *M) const {
|
Module *M) const {
|
||||||
std::ofstream Out(Filename.c_str());
|
std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
|
||||||
|
std::ios::binary;
|
||||||
|
std::ofstream Out(Filename.c_str(), io_mode);
|
||||||
if (!Out.good()) return true;
|
if (!Out.good()) return true;
|
||||||
WriteBytecodeToFile(M ? M : Program, Out, /*compression=*/true);
|
WriteBytecodeToFile(M ? M : Program, Out, /*compression=*/true);
|
||||||
return false;
|
return false;
|
||||||
@ -76,7 +86,9 @@ void BugDriver::EmitProgressBytecode(const std::string &ID, bool NoFlyer) {
|
|||||||
|
|
||||||
static void RunChild(Module *Program,const std::vector<const PassInfo*> &Passes,
|
static void RunChild(Module *Program,const std::vector<const PassInfo*> &Passes,
|
||||||
const std::string &OutFilename) {
|
const std::string &OutFilename) {
|
||||||
std::ofstream OutFile(OutFilename.c_str());
|
std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
|
||||||
|
std::ios::binary;
|
||||||
|
std::ofstream OutFile(OutFilename.c_str(), io_mode);
|
||||||
if (!OutFile.good()) {
|
if (!OutFile.good()) {
|
||||||
std::cerr << "Error opening bytecode file: " << OutFilename << "\n";
|
std::cerr << "Error opening bytecode file: " << OutFilename << "\n";
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -119,6 +131,7 @@ bool BugDriver::runPasses(const std::vector<const PassInfo*> &Passes,
|
|||||||
uniqueFilename.makeUnique();
|
uniqueFilename.makeUnique();
|
||||||
OutputFilename = uniqueFilename.toString();
|
OutputFilename = uniqueFilename.toString();
|
||||||
|
|
||||||
|
#ifndef PLATFORMINDEPENDENT
|
||||||
pid_t child_pid;
|
pid_t child_pid;
|
||||||
switch (child_pid = fork()) {
|
switch (child_pid = fork()) {
|
||||||
case -1: // Error occurred
|
case -1: // Error occurred
|
||||||
@ -139,12 +152,16 @@ bool BugDriver::runPasses(const std::vector<const PassInfo*> &Passes,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool ExitedOK = WIFEXITED(Status) && WEXITSTATUS(Status) == 0;
|
bool ExitedOK = WIFEXITED(Status) && WEXITSTATUS(Status) == 0;
|
||||||
|
#else
|
||||||
|
bool ExitedOK = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
// If we are supposed to delete the bytecode file or if the passes crashed,
|
// If we are supposed to delete the bytecode file or if the passes crashed,
|
||||||
// remove it now. This may fail if the file was never created, but that's ok.
|
// remove it now. This may fail if the file was never created, but that's ok.
|
||||||
if (DeleteOutput || !ExitedOK)
|
if (DeleteOutput || !ExitedOK)
|
||||||
sys::Path(OutputFilename).destroyFile();
|
sys::Path(OutputFilename).destroyFile();
|
||||||
|
|
||||||
|
#ifndef PLATFORMINDEPENDENT
|
||||||
if (!Quiet) {
|
if (!Quiet) {
|
||||||
if (ExitedOK)
|
if (ExitedOK)
|
||||||
std::cout << "Success!\n";
|
std::cout << "Success!\n";
|
||||||
@ -159,6 +176,7 @@ bool BugDriver::runPasses(const std::vector<const PassInfo*> &Passes,
|
|||||||
else
|
else
|
||||||
std::cout << "Failed for unknown reason!\n";
|
std::cout << "Failed for unknown reason!\n";
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Was the child successful?
|
// Was the child successful?
|
||||||
return !ExitedOK;
|
return !ExitedOK;
|
||||||
|
@ -63,9 +63,8 @@ int main(int argc, char **argv) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// In addition to deleting all other functions, we also want to spiff it up a
|
// In addition to deleting all other functions, we also want to spiff it
|
||||||
// little bit. Do this now.
|
// up a little bit. Do this now.
|
||||||
//
|
|
||||||
PassManager Passes;
|
PassManager Passes;
|
||||||
Passes.add(new TargetData("extract", M.get())); // Use correct TargetData
|
Passes.add(new TargetData("extract", M.get())); // Use correct TargetData
|
||||||
// Either isolate the function or delete it from the Module
|
// Either isolate the function or delete it from the Module
|
||||||
@ -84,8 +83,11 @@ int main(int argc, char **argv) {
|
|||||||
<< "Use -f command line argument to force output\n";
|
<< "Use -f command line argument to force output\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
Out = new std::ofstream(OutputFilename.c_str());
|
std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
|
||||||
|
std::ios::binary;
|
||||||
|
Out = new std::ofstream(OutputFilename.c_str(), io_mode);
|
||||||
} else { // Specified stdout
|
} else { // Specified stdout
|
||||||
|
// FIXME: cout is not binary!
|
||||||
Out = &std::cout;
|
Out = &std::cout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,9 +164,12 @@ int main(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (OutputFilename == "-")
|
if (OutputFilename == "-")
|
||||||
|
// FIXME: cout is not binary!
|
||||||
Out = &std::cout;
|
Out = &std::cout;
|
||||||
else {
|
else {
|
||||||
Out = new std::ofstream(OutputFilename.c_str(), std::ios::out);
|
std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
|
||||||
|
std::ios::binary;
|
||||||
|
Out = new std::ofstream(OutputFilename.c_str(), io_mode);
|
||||||
|
|
||||||
// Make sure that the Out file gets unlinked from the disk if we get a
|
// Make sure that the Out file gets unlinked from the disk if we get a
|
||||||
// signal
|
// signal
|
||||||
|
@ -238,7 +238,9 @@ int main(int argc, char **argv, char **envp ) {
|
|||||||
// Create the output file.
|
// Create the output file.
|
||||||
std::string RealBytecodeOutput = OutputFilename;
|
std::string RealBytecodeOutput = OutputFilename;
|
||||||
if (!LinkAsLibrary) RealBytecodeOutput += ".bc";
|
if (!LinkAsLibrary) RealBytecodeOutput += ".bc";
|
||||||
std::ofstream Out(RealBytecodeOutput.c_str());
|
std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
|
||||||
|
std::ios::binary;
|
||||||
|
std::ofstream Out(RealBytecodeOutput.c_str(), io_mode);
|
||||||
if (!Out.good())
|
if (!Out.good())
|
||||||
return PrintAndReturn(argv[0], "error opening '" + RealBytecodeOutput +
|
return PrintAndReturn(argv[0], "error opening '" + RealBytecodeOutput +
|
||||||
"' for writing!");
|
"' for writing!");
|
||||||
|
@ -436,7 +436,9 @@ void doExtract() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Open up a file stream for writing
|
// Open up a file stream for writing
|
||||||
std::ofstream file(I->getPath().c_str());
|
std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
|
||||||
|
std::ios::binary;
|
||||||
|
std::ofstream file(I->getPath().c_str(), io_mode);
|
||||||
|
|
||||||
// Get the data and its length
|
// Get the data and its length
|
||||||
const char* data = reinterpret_cast<const char*>(I->getData());
|
const char* data = reinterpret_cast<const char*>(I->getData());
|
||||||
|
@ -84,25 +84,26 @@ int main(int argc, char **argv) {
|
|||||||
<< "Use -f command line argument to force output\n";
|
<< "Use -f command line argument to force output\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
Out = new std::ofstream(OutputFilename.c_str(), std::ios_base::out |
|
Out = new std::ofstream(OutputFilename.c_str(), std::ios::out |
|
||||||
std::ios_base::trunc | std::ios_base::binary);
|
std::ios::trunc | std::ios::binary);
|
||||||
} else { // Specified stdout
|
} else { // Specified stdout
|
||||||
Out = &std::cout;
|
// FIXME: cout is not binary!
|
||||||
|
Out = &std::cout;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (InputFilename == "-") {
|
if (InputFilename == "-") {
|
||||||
OutputFilename = "-";
|
OutputFilename = "-";
|
||||||
Out = &std::cout;
|
Out = &std::cout;
|
||||||
} else {
|
} else {
|
||||||
std::string IFN = InputFilename;
|
std::string IFN = InputFilename;
|
||||||
int Len = IFN.length();
|
int Len = IFN.length();
|
||||||
if (IFN[Len-3] == '.' && IFN[Len-2] == 'l' && IFN[Len-1] == 'l') {
|
if (IFN[Len-3] == '.' && IFN[Len-2] == 'l' && IFN[Len-1] == 'l') {
|
||||||
// Source ends in .ll
|
// Source ends in .ll
|
||||||
OutputFilename = std::string(IFN.begin(), IFN.end()-3);
|
OutputFilename = std::string(IFN.begin(), IFN.end()-3);
|
||||||
} else {
|
} else {
|
||||||
OutputFilename = IFN; // Append a .bc to it
|
OutputFilename = IFN; // Append a .bc to it
|
||||||
}
|
}
|
||||||
OutputFilename += ".bc";
|
OutputFilename += ".bc";
|
||||||
|
|
||||||
if (!Force && std::ifstream(OutputFilename.c_str())) {
|
if (!Force && std::ifstream(OutputFilename.c_str())) {
|
||||||
// If force is not specified, make sure not to overwrite a file!
|
// If force is not specified, make sure not to overwrite a file!
|
||||||
@ -112,8 +113,8 @@ int main(int argc, char **argv) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Out = new std::ofstream(OutputFilename.c_str(), std::ios_base::out |
|
Out = new std::ofstream(OutputFilename.c_str(), std::ios::out |
|
||||||
std::ios_base::trunc | std::ios_base::binary);
|
std::ios::trunc | std::ios::binary);
|
||||||
// Make sure that the Out file gets unlinked from the disk if we get a
|
// Make sure that the Out file gets unlinked from the disk if we get a
|
||||||
// SIGINT
|
// SIGINT
|
||||||
sys::RemoveFileOnSignal(sys::Path(OutputFilename));
|
sys::RemoveFileOnSignal(sys::Path(OutputFilename));
|
||||||
|
@ -63,9 +63,8 @@ int main(int argc, char **argv) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// In addition to deleting all other functions, we also want to spiff it up a
|
// In addition to deleting all other functions, we also want to spiff it
|
||||||
// little bit. Do this now.
|
// up a little bit. Do this now.
|
||||||
//
|
|
||||||
PassManager Passes;
|
PassManager Passes;
|
||||||
Passes.add(new TargetData("extract", M.get())); // Use correct TargetData
|
Passes.add(new TargetData("extract", M.get())); // Use correct TargetData
|
||||||
// Either isolate the function or delete it from the Module
|
// Either isolate the function or delete it from the Module
|
||||||
@ -84,8 +83,11 @@ int main(int argc, char **argv) {
|
|||||||
<< "Use -f command line argument to force output\n";
|
<< "Use -f command line argument to force output\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
Out = new std::ofstream(OutputFilename.c_str());
|
std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
|
||||||
|
std::ios::binary;
|
||||||
|
Out = new std::ofstream(OutputFilename.c_str(), io_mode);
|
||||||
} else { // Specified stdout
|
} else { // Specified stdout
|
||||||
|
// FIXME: cout is not binary!
|
||||||
Out = &std::cout;
|
Out = &std::cout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,7 +186,9 @@ static void RemoveEnv(const char * name, char ** const envp) {
|
|||||||
void GenerateBytecode(Module* M, const std::string& FileName) {
|
void GenerateBytecode(Module* M, const std::string& FileName) {
|
||||||
|
|
||||||
// Create the output file.
|
// Create the output file.
|
||||||
std::ofstream Out(FileName.c_str());
|
std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
|
||||||
|
std::ios::binary;
|
||||||
|
std::ofstream Out(FileName.c_str(), io_mode);
|
||||||
if (!Out.good()) {
|
if (!Out.good()) {
|
||||||
PrintAndReturn("error opening '" + FileName + "' for writing!");
|
PrintAndReturn("error opening '" + FileName + "' for writing!");
|
||||||
return;
|
return;
|
||||||
|
@ -112,6 +112,7 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
if (DumpAsm) std::cerr << "Here's the assembly:\n" << Composite.get();
|
if (DumpAsm) std::cerr << "Here's the assembly:\n" << Composite.get();
|
||||||
|
|
||||||
|
// FIXME: cout is not binary!
|
||||||
std::ostream *Out = &std::cout; // Default to printing to stdout...
|
std::ostream *Out = &std::cout; // Default to printing to stdout...
|
||||||
if (OutputFilename != "-") {
|
if (OutputFilename != "-") {
|
||||||
if (!Force && std::ifstream(OutputFilename.c_str())) {
|
if (!Force && std::ifstream(OutputFilename.c_str())) {
|
||||||
@ -121,7 +122,9 @@ int main(int argc, char **argv) {
|
|||||||
<< "Use -f command line argument to force output\n";
|
<< "Use -f command line argument to force output\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
Out = new std::ofstream(OutputFilename.c_str());
|
std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
|
||||||
|
std::ios::binary;
|
||||||
|
Out = new std::ofstream(OutputFilename.c_str(), io_mode);
|
||||||
if (!Out->good()) {
|
if (!Out->good()) {
|
||||||
std::cerr << argv[0] << ": error opening '" << OutputFilename << "'!\n";
|
std::cerr << argv[0] << ": error opening '" << OutputFilename << "'!\n";
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -95,6 +95,7 @@ int main(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Figure out what stream we are supposed to write to...
|
// Figure out what stream we are supposed to write to...
|
||||||
|
// FIXME: cout is not binary!
|
||||||
std::ostream *Out = &std::cout; // Default to printing to stdout...
|
std::ostream *Out = &std::cout; // Default to printing to stdout...
|
||||||
if (OutputFilename != "-") {
|
if (OutputFilename != "-") {
|
||||||
if (!Force && std::ifstream(OutputFilename.c_str())) {
|
if (!Force && std::ifstream(OutputFilename.c_str())) {
|
||||||
@ -104,7 +105,9 @@ int main(int argc, char **argv) {
|
|||||||
<< "Use -f command line argument to force output\n";
|
<< "Use -f command line argument to force output\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
Out = new std::ofstream(OutputFilename.c_str());
|
std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
|
||||||
|
std::ios::binary;
|
||||||
|
Out = new std::ofstream(OutputFilename.c_str(), io_mode);
|
||||||
|
|
||||||
if (!Out->good()) {
|
if (!Out->good()) {
|
||||||
std::cerr << argv[0] << ": error opening " << OutputFilename << "!\n";
|
std::cerr << argv[0] << ": error opening " << OutputFilename << "!\n";
|
||||||
@ -117,8 +120,8 @@ int main(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If the output is set to be emitted to standard out, and standard out is a
|
// If the output is set to be emitted to standard out, and standard out is a
|
||||||
// console, print out a warning message and refuse to do it. We don't impress
|
// console, print out a warning message and refuse to do it. We don't
|
||||||
// anyone by spewing tons of binary goo to a terminal.
|
// impress anyone by spewing tons of binary goo to a terminal.
|
||||||
if (!Force && !NoOutput && CheckBytecodeOutputToConsole(Out,!Quiet)) {
|
if (!Force && !NoOutput && CheckBytecodeOutputToConsole(Out,!Quiet)) {
|
||||||
NoOutput = true;
|
NoOutput = true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user