PcapFileDirectoryVars *ptv);
static void CleanupPcapFileFromThreadVars(PcapFileThreadVars *tv, PcapFileFileVars *pfv);
static void CleanupPcapFileThreadVars(PcapFileThreadVars *tv);
+static TmEcode PcapFileExit(TmEcode status);
void CleanupPcapFileFromThreadVars(PcapFileThreadVars *tv, PcapFileFileVars *pfv)
{
SC_ATOMIC_INIT(pcap_g.invalid_checksums);
}
+TmEcode PcapFileExit(TmEcode status)
+{
+ if(RunModeUnixSocketIsActive()) {
+ SCReturnInt(TM_ECODE_DONE);
+ } else {
+ EngineStop();
+ SCReturnInt(status);
+ }
+}
+
TmEcode ReceivePcapFileLoop(ThreadVars *tv, void *data, void *slot)
{
SCEnter();
SCLogDebug("Pcap file loop complete with status %u", status);
- if(RunModeUnixSocketIsActive()) {
- SCReturnInt(TM_ECODE_DONE);
- } else {
- EngineStop();
- SCReturnInt(TM_ECODE_OK);
- }
+ status = PcapFileExit(status);
+
+ SCReturnInt(status);
}
TmEcode ReceivePcapFileThreadInit(ThreadVars *tv, const void *initdata, void **data)
{
SCEnter();
+ TmEcode status = TM_ECODE_OK;
const char *tmpstring = NULL;
const char *tmp_bpf_string = NULL;
if (initdata == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT, "error: initdata == NULL");
- SCReturnInt(TM_ECODE_FAILED);
+
+ status = PcapFileExit(TM_ECODE_FAILED);
+ SCReturnInt(status);
}
PcapFileThreadVars *ptv = SCMalloc(sizeof(PcapFileThreadVars));
- if (unlikely(ptv == NULL))
- SCReturnInt(TM_ECODE_FAILED);
+ if (unlikely(ptv == NULL)) {
+ status = PcapFileExit(TM_ECODE_FAILED);
+ SCReturnInt(status);
+ }
memset(ptv, 0, sizeof(PcapFileThreadVars));
memset(&ptv->shared.last_processed, 0, sizeof(struct timespec));
if (unlikely(ptv->shared.bpf_string == NULL)) {
SCLogError(SC_ERR_MEM_ALLOC, "Failed to allocate bpf_string");
CleanupPcapFileThreadVars(ptv);
- SCReturnInt(TM_ECODE_FAILED);
+
+ status = PcapFileExit(TM_ECODE_FAILED);
+ SCReturnInt(status);
}
}
SCLogInfo("Checking file or directory %s", (char*)initdata);
if(PcapDetermineDirectoryOrFile((char *)initdata, &directory) == TM_ECODE_FAILED) {
CleanupPcapFileThreadVars(ptv);
- SCReturnInt(TM_ECODE_FAILED);
+ status = PcapFileExit(TM_ECODE_FAILED);
+ SCReturnInt(status);
}
if(directory == NULL) {
if (unlikely(pv == NULL)) {
SCLogError(SC_ERR_MEM_ALLOC, "Failed to allocate file vars");
CleanupPcapFileThreadVars(ptv);
- SCReturnInt(TM_ECODE_FAILED);
+ status = PcapFileExit(TM_ECODE_FAILED);
+ SCReturnInt(status);
}
memset(pv, 0, sizeof(PcapFileFileVars));
SCLogError(SC_ERR_MEM_ALLOC, "Failed to allocate filename");
CleanupPcapFileFileVars(pv);
CleanupPcapFileThreadVars(ptv);
- SCReturnInt(TM_ECODE_FAILED);
+ status = PcapFileExit(TM_ECODE_FAILED);
+ SCReturnInt(status);
}
- TmEcode init_file_return = InitPcapFile(pv);
- if(init_file_return == TM_ECODE_OK) {
+ status = InitPcapFile(pv);
+ if(status == TM_ECODE_OK) {
pv->shared = &ptv->shared;
ptv->is_directory = 0;
"Failed to init pcap file %s, skipping", (char *)initdata);
CleanupPcapFileFileVars(pv);
CleanupPcapFileThreadVars(ptv);
- SCReturnInt(init_file_return);
+
+ status = PcapFileExit(status);
+ SCReturnInt(status);
}
} else {
SCLogInfo("Argument %s was a directory", (char *)initdata);
SCLogError(SC_ERR_MEM_ALLOC, "Failed to allocate directory vars");
closedir(directory);
CleanupPcapFileThreadVars(ptv);
- SCReturnInt(TM_ECODE_FAILED);
+ status = PcapFileExit(TM_ECODE_FAILED);
+ SCReturnInt(status);
}
memset(pv, 0, sizeof(PcapFileDirectoryVars));
SCLogError(SC_ERR_MEM_ALLOC, "Failed to allocate filename");
CleanupPcapFileDirectoryVars(pv);
CleanupPcapFileThreadVars(ptv);
- SCReturnInt(TM_ECODE_FAILED);
+ status = PcapFileExit(TM_ECODE_FAILED);
+ SCReturnInt(status);
}
int should_loop = 0;