void mpseFree( void * pvoid ) { MPSE * p = (MPSE*)pvoid; if (p == NULL) return; switch( p->method ) { case MPSE_AC_BNFA: case MPSE_AC_BNFA_Q: if (p->obj) bnfaFree((bnfa_struct_t*)p->obj); free(p); return; case MPSE_AC: if (p->obj) acsmFree((ACSM_STRUCT *)p->obj); free(p); return; case MPSE_ACF: case MPSE_ACF_Q: case MPSE_ACS: case MPSE_ACB: case MPSE_ACSB: if (p->obj) acsmFree2((ACSM_STRUCT2 *)p->obj); free(p); return; case MPSE_LOWMEM: case MPSE_LOWMEM_Q: if (p->obj) KTrieDelete((KTRIE_STRUCT *)p->obj); free(p); return; #ifdef INTEL_SOFT_CPM case MPSE_INTEL_CPM: if (p->obj) IntelPmDelete((IntelPm *)p->obj); free(p); break; #endif default: return; } }
void mpseFree( void * pvoid ) { MPSE * p = (MPSE*)pvoid; if (p == NULL) return; switch( p->method ) { case MPSE_AC_BNFA: if (p->obj) bnfaFree((bnfa_struct_t*)p->obj); free(p); return; case MPSE_AC: if (p->obj) acsmFree((ACSM_STRUCT *)p->obj); free(p); return; case MPSE_ACF: case MPSE_ACS: case MPSE_ACB: case MPSE_ACSB: if (p->obj) acsmFree2((ACSM_STRUCT2 *)p->obj); free(p); return; case MPSE_LOWMEM: if (p->obj) KTrieDelete((KTRIE_STRUCT *)p->obj); free(p); return; default: return; } }
/* Cleanup memory used by this coprocessor. Not used at the moment, but useful to keep track of what should be released. */ int32_t nvmStringMatchCoproCleanup (nvmCoprocessorState *c, uint8_t *data) { nvmStringMatchCoproInternalData *smcdata = c -> data; nvmStringMatchCoproPattern *p = NULL, *nextp = NULL; //nvmStringMatchCoproMatchResult *r = NULL, *nextr = NULL; uint16_t g; for (p = smcdata -> patterns; p; p = nextp) { free (p -> pattern); nextp = p -> next; free (p); } /* Reset match results data */ free (smcdata -> matches); /* Free graphs data */ for (g = 0; g < smcdata -> graphs_no; g++) acsmFree2 (smcdata -> acsm[g]); /* Free whole object */ free (smcdata); return (nvmSUCCESS); }