EventTraceMgr: Move fclose() to destructor

Coverity complains about a missing fclose() in a non-existing
destructor. Also sprinkle in a strerror() call for fopen() to
provide a bit of a hint what might have gone wrong.
This commit is contained in:
Arne Welzel 2025-05-19 10:03:40 +02:00
parent bf30cf7997
commit 1465e390a2
2 changed files with 13 additions and 3 deletions

View file

@ -955,7 +955,17 @@ bool ValTraceMgr::IsUnsupported(const Val* v) const {
EventTraceMgr::EventTraceMgr(const std::string& trace_file) {
f = fopen(trace_file.c_str(), "w");
if ( ! f )
reporter->FatalError("can't open event trace file %s", trace_file.c_str());
reporter->FatalError("can't open event trace file %s: %s", trace_file.c_str(), strerror(errno));
}
EventTraceMgr::~EventTraceMgr() {
if ( f ) {
if ( fclose(f) )
// Not fatal, won't do anything with it anymore anyhow.
reporter->Error("failed to close event trace file: %s", strerror(errno));
f = nullptr;
}
}
void EventTraceMgr::Generate() {
@ -999,8 +1009,6 @@ void EventTraceMgr::Generate() {
for ( auto& c : c_t )
fprintf(f, "#\t%s\n", c.c_str());
}
fclose(f);
}
void EventTraceMgr::StartEvent(const ScriptFunc* ev, const zeek::Args* args) {

View file

@ -441,6 +441,8 @@ class EventTraceMgr {
public:
EventTraceMgr(const std::string& trace_file);
~EventTraceMgr();
// Generates the trace upon exit.
void Generate();