From e71a5270a2fe040e0542bc2c74a11a303688f6ae Mon Sep 17 00:00:00 2001 From: Ali Saidi Date: Thu, 15 May 2008 19:10:26 -0400 Subject: 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 --- src/base/output.cc | 4 ++-- src/base/output.hh | 3 ++- src/dev/etherdump.cc | 14 +++++++------- src/dev/etherdump.hh | 2 +- src/mem/cache/tags/split.cc | 5 ++--- 5 files changed, 14 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/base/output.cc b/src/base/output.cc index 9d02a4a71..5a1768a76 100644 --- a/src/base/output.cc +++ b/src/base/output.cc @@ -98,7 +98,7 @@ OutputDirectory::create(const string &name, bool binary) ofstream *file = new ofstream(resolve(name).c_str(), ios::trunc | binary ? ios::binary : (ios::openmode)0); if (!file->is_open()) - panic("Cannot open file %s", name); + fatal("Cannot open file %s", name); return file; } @@ -119,7 +119,7 @@ OutputDirectory::find(const string &name) ofstream *file = new ofstream(filename.c_str(), ios::trunc); if (!file->is_open()) - panic("Cannot open file %s", filename); + fatal("Cannot open file %s", filename); files[filename] = file; return file; diff --git a/src/base/output.hh b/src/base/output.hh index 5de0c4005..b1d1d7e7d 100644 --- a/src/base/output.hh +++ b/src/base/output.hh @@ -43,6 +43,8 @@ class OutputDirectory map_t files; std::string dir; + std::string resolve(const std::string &name); + public: OutputDirectory(); ~OutputDirectory(); @@ -50,7 +52,6 @@ class OutputDirectory void setDirectory(const std::string &dir); const std::string &directory(); - std::string resolve(const std::string &name); std::ostream *create(const std::string &name, bool binary = false); std::ostream *find(const std::string &name); diff --git a/src/dev/etherdump.cc b/src/dev/etherdump.cc index 471093521..07e52f36d 100644 --- a/src/dev/etherdump.cc +++ b/src/dev/etherdump.cc @@ -45,7 +45,7 @@ using std::string; 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) { } @@ -86,7 +86,7 @@ EtherDump::init() hdr.sigfigs = 0; hdr.linktype = DLT_EN10MB; - stream.write(reinterpret_cast(&hdr), sizeof(hdr)); + stream->write(reinterpret_cast(&hdr), sizeof(hdr)); /* * output an empty packet with the current time so that we know @@ -98,9 +98,9 @@ EtherDump::init() pkthdr.microseconds = 0; pkthdr.caplen = 0; pkthdr.len = 0; - stream.write(reinterpret_cast(&pkthdr), sizeof(pkthdr)); + stream->write(reinterpret_cast(&pkthdr), sizeof(pkthdr)); - stream.flush(); + stream->flush(); } void @@ -111,9 +111,9 @@ EtherDump::dumpPacket(EthPacketPtr &packet) pkthdr.microseconds = (curTick / Clock::Int::us) % ULL(1000000); pkthdr.caplen = std::min(packet->length, maxlen); pkthdr.len = packet->length; - stream.write(reinterpret_cast(&pkthdr), sizeof(pkthdr)); - stream.write(reinterpret_cast(packet->data), pkthdr.caplen); - stream.flush(); + stream->write(reinterpret_cast(&pkthdr), sizeof(pkthdr)); + stream->write(reinterpret_cast(packet->data), pkthdr.caplen); + stream->flush(); } EtherDump * diff --git a/src/dev/etherdump.hh b/src/dev/etherdump.hh index 1027ce4d0..733e61c97 100644 --- a/src/dev/etherdump.hh +++ b/src/dev/etherdump.hh @@ -46,7 +46,7 @@ class EtherDump : public SimObject { private: - std::ofstream stream; + std::ostream *stream; const int maxlen; void dumpPacket(EthPacketPtr &packet); void init(); diff --git a/src/mem/cache/tags/split.cc b/src/mem/cache/tags/split.cc index 0df85cc92..5bed44bd3 100644 --- a/src/mem/cache/tags/split.cc +++ b/src/mem/cache/tags/split.cc @@ -379,13 +379,12 @@ Split::cleanupRefs() else if (lru_net) lru_net->cleanupRefs(); - ofstream memPrint(simout.resolve("memory_footprint.txt").c_str(), - ios::trunc); + ostream *memPrint = simout.create("memory_footprint.txt"); // this shouldn't be here but it happens at the end, which is what i want memIter end = memHash.end(); 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); } } -- cgit v1.2.3