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:
Ali Saidi
2008-05-15 19:10:26 -04:00
parent 4a4317ae18
commit e71a5270a2
5 changed files with 14 additions and 14 deletions

View File

@@ -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<char *>(&hdr), sizeof(hdr));
stream->write(reinterpret_cast<char *>(&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<char *>(&pkthdr), sizeof(pkthdr));
stream->write(reinterpret_cast<char *>(&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<char *>(&pkthdr), sizeof(pkthdr));
stream.write(reinterpret_cast<char *>(packet->data), pkthdr.caplen);
stream.flush();
stream->write(reinterpret_cast<char *>(&pkthdr), sizeof(pkthdr));
stream->write(reinterpret_cast<char *>(packet->data), pkthdr.caplen);
stream->flush();
}
EtherDump *

View File

@@ -46,7 +46,7 @@
class EtherDump : public SimObject
{
private:
std::ofstream stream;
std::ostream *stream;
const int maxlen;
void dumpPacket(EthPacketPtr &packet);
void init();