Make sure that output files are always checked success before they're used.
Make OutputDirectory::resolve() private and change the functions using resolve() to instead use create(). --HG-- extra : convert_revision : 36d4be629764d0c4c708cec8aa712cd15f966453
This commit is contained in:
parent
4a4317ae18
commit
e71a5270a2
5 changed files with 14 additions and 14 deletions
|
@ -98,7 +98,7 @@ OutputDirectory::create(const string &name, bool binary)
|
||||||
ofstream *file = new ofstream(resolve(name).c_str(),
|
ofstream *file = new ofstream(resolve(name).c_str(),
|
||||||
ios::trunc | binary ? ios::binary : (ios::openmode)0);
|
ios::trunc | binary ? ios::binary : (ios::openmode)0);
|
||||||
if (!file->is_open())
|
if (!file->is_open())
|
||||||
panic("Cannot open file %s", name);
|
fatal("Cannot open file %s", name);
|
||||||
|
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,7 @@ OutputDirectory::find(const string &name)
|
||||||
|
|
||||||
ofstream *file = new ofstream(filename.c_str(), ios::trunc);
|
ofstream *file = new ofstream(filename.c_str(), ios::trunc);
|
||||||
if (!file->is_open())
|
if (!file->is_open())
|
||||||
panic("Cannot open file %s", filename);
|
fatal("Cannot open file %s", filename);
|
||||||
|
|
||||||
files[filename] = file;
|
files[filename] = file;
|
||||||
return file;
|
return file;
|
||||||
|
|
|
@ -43,6 +43,8 @@ class OutputDirectory
|
||||||
map_t files;
|
map_t files;
|
||||||
std::string dir;
|
std::string dir;
|
||||||
|
|
||||||
|
std::string resolve(const std::string &name);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
OutputDirectory();
|
OutputDirectory();
|
||||||
~OutputDirectory();
|
~OutputDirectory();
|
||||||
|
@ -50,7 +52,6 @@ class OutputDirectory
|
||||||
void setDirectory(const std::string &dir);
|
void setDirectory(const std::string &dir);
|
||||||
const std::string &directory();
|
const std::string &directory();
|
||||||
|
|
||||||
std::string resolve(const std::string &name);
|
|
||||||
std::ostream *create(const std::string &name, bool binary = false);
|
std::ostream *create(const std::string &name, bool binary = false);
|
||||||
std::ostream *find(const std::string &name);
|
std::ostream *find(const std::string &name);
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
EtherDump::EtherDump(const Params *p)
|
EtherDump::EtherDump(const Params *p)
|
||||||
: SimObject(p), stream(simout.resolve(p->file).c_str()),
|
: SimObject(p), stream(simout.create(p->file, true)),
|
||||||
maxlen(p->maxlen)
|
maxlen(p->maxlen)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,7 @@ EtherDump::init()
|
||||||
hdr.sigfigs = 0;
|
hdr.sigfigs = 0;
|
||||||
hdr.linktype = DLT_EN10MB;
|
hdr.linktype = DLT_EN10MB;
|
||||||
|
|
||||||
stream.write(reinterpret_cast<char *>(&hdr), sizeof(hdr));
|
stream->write(reinterpret_cast<char *>(&hdr), sizeof(hdr));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* output an empty packet with the current time so that we know
|
* output an empty packet with the current time so that we know
|
||||||
|
@ -98,9 +98,9 @@ EtherDump::init()
|
||||||
pkthdr.microseconds = 0;
|
pkthdr.microseconds = 0;
|
||||||
pkthdr.caplen = 0;
|
pkthdr.caplen = 0;
|
||||||
pkthdr.len = 0;
|
pkthdr.len = 0;
|
||||||
stream.write(reinterpret_cast<char *>(&pkthdr), sizeof(pkthdr));
|
stream->write(reinterpret_cast<char *>(&pkthdr), sizeof(pkthdr));
|
||||||
|
|
||||||
stream.flush();
|
stream->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -111,9 +111,9 @@ EtherDump::dumpPacket(EthPacketPtr &packet)
|
||||||
pkthdr.microseconds = (curTick / Clock::Int::us) % ULL(1000000);
|
pkthdr.microseconds = (curTick / Clock::Int::us) % ULL(1000000);
|
||||||
pkthdr.caplen = std::min(packet->length, maxlen);
|
pkthdr.caplen = std::min(packet->length, maxlen);
|
||||||
pkthdr.len = packet->length;
|
pkthdr.len = packet->length;
|
||||||
stream.write(reinterpret_cast<char *>(&pkthdr), sizeof(pkthdr));
|
stream->write(reinterpret_cast<char *>(&pkthdr), sizeof(pkthdr));
|
||||||
stream.write(reinterpret_cast<char *>(packet->data), pkthdr.caplen);
|
stream->write(reinterpret_cast<char *>(packet->data), pkthdr.caplen);
|
||||||
stream.flush();
|
stream->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
EtherDump *
|
EtherDump *
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
class EtherDump : public SimObject
|
class EtherDump : public SimObject
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
std::ofstream stream;
|
std::ostream *stream;
|
||||||
const int maxlen;
|
const int maxlen;
|
||||||
void dumpPacket(EthPacketPtr &packet);
|
void dumpPacket(EthPacketPtr &packet);
|
||||||
void init();
|
void init();
|
||||||
|
|
5
src/mem/cache/tags/split.cc
vendored
5
src/mem/cache/tags/split.cc
vendored
|
@ -379,13 +379,12 @@ Split::cleanupRefs()
|
||||||
else if (lru_net)
|
else if (lru_net)
|
||||||
lru_net->cleanupRefs();
|
lru_net->cleanupRefs();
|
||||||
|
|
||||||
ofstream memPrint(simout.resolve("memory_footprint.txt").c_str(),
|
ostream *memPrint = simout.create("memory_footprint.txt");
|
||||||
ios::trunc);
|
|
||||||
|
|
||||||
// this shouldn't be here but it happens at the end, which is what i want
|
// this shouldn't be here but it happens at the end, which is what i want
|
||||||
memIter end = memHash.end();
|
memIter end = memHash.end();
|
||||||
for (memIter iter = memHash.begin(); iter != end; ++iter) {
|
for (memIter iter = memHash.begin(); iter != end; ++iter) {
|
||||||
ccprintf(memPrint, "%8x\t%d\n", (*iter).first, (*iter).second);
|
ccprintf(*memPrint, "%8x\t%d\n", (*iter).first, (*iter).second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue