/*
- * Copyright (c) 2015, Intel Corporation
+ * Copyright (c) 2015-2016, Intel Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
}
static
-void goughCheckEOD(const struct NFA *nfa, u16 s,
+char goughCheckEOD(const struct NFA *nfa, u16 s,
const struct gough_som_info *som,
u64a offset, SomNfaCallback cb, void *ctxt) {
const struct mcclellan *m = (const struct mcclellan *)getImplNfa(nfa);
const struct mstate_aux *aux = get_aux(m, s);
- if (aux->accept_eod) {
- doReports(cb, ctxt, m, som, s, offset, 1, NULL, NULL, NULL);
+ if (!aux->accept_eod) {
+ return MO_CONTINUE_MATCHING;
}
+ return doReports(cb, ctxt, m, som, s, offset, 1, NULL, NULL, NULL);
}
char nfaExecGough8_testEOD(const struct NFA *nfa, const char *state,
UNUSED NfaCallback callback,
SomNfaCallback som_callback, void *context) {
const struct gough_som_info *som = getSomInfoConst(state);
- goughCheckEOD(nfa, *(const u8 *)state, som, offset, som_callback, context);
- return 0;
+ return goughCheckEOD(nfa, *(const u8 *)state, som, offset, som_callback,
+ context);
}
char nfaExecGough16_testEOD(const struct NFA *nfa, const char *state,
SomNfaCallback som_callback, void *context) {
assert(ISALIGNED_N(state, 8));
const struct gough_som_info *som = getSomInfoConst(state);
- goughCheckEOD(nfa, *(const u16 *)state, som, offset, som_callback, context);
- return 0;
+ return goughCheckEOD(nfa, *(const u16 *)state, som, offset, som_callback,
+ context);
}
char nfaExecGough8_queueInitState(UNUSED const struct NFA *nfa, struct mq *q) {
/*
- * Copyright (c) 2015, Intel Corporation
+ * Copyright (c) 2015-2016, Intel Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
}
static really_inline
-void mcclellanCheckEOD(const struct NFA *nfa, u16 s, u64a offset,
+char mcclellanCheckEOD(const struct NFA *nfa, u16 s, u64a offset,
NfaCallback cb, void *ctxt) {
const struct mcclellan *m = getImplNfa(nfa);
const struct mstate_aux *aux = get_aux(m, s);
- if (aux->accept_eod) {
- doComplexReport(cb, ctxt, m, s, offset, 1, NULL, NULL);
+ if (!aux->accept_eod) {
+ return MO_CONTINUE_MATCHING;
}
+ return doComplexReport(cb, ctxt, m, s, offset, 1, NULL, NULL);
}
static really_inline
UNUSED const char *streamState,
u64a offset, NfaCallback callback,
UNUSED SomNfaCallback som_cb, void *context) {
- mcclellanCheckEOD(nfa, *(const u8 *)state, offset, callback, context);
- return 0;
+ return mcclellanCheckEOD(nfa, *(const u8 *)state, offset, callback,
+ context);
}
char nfaExecMcClellan16_testEOD(const struct NFA *nfa, const char *state,
u64a offset, NfaCallback callback,
UNUSED SomNfaCallback som_cb, void *context) {
assert(ISALIGNED_N(state, 2));
- mcclellanCheckEOD(nfa, *(const u16 *)state, offset, callback, context);
- return 0;
+ return mcclellanCheckEOD(nfa, *(const u16 *)state, offset, callback,
+ context);
}
char nfaExecMcClellan8_queueInitState(UNUSED const struct NFA *nfa, struct mq *q) {
/*
- * Copyright (c) 2015, Intel Corporation
+ * Copyright (c) 2015-2016, Intel Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* @param callback the callback to call for each match raised
* @param som_cb the callback to call for each match raised (Haig)
* @param context context pointer passed to each callback
+ *
+ * @return @ref MO_HALT_MATCHING if the user instructed us to halt, otherwise
+ * @ref MO_CONTINUE_MATCHING.
*/
char nfaCheckFinalState(const struct NFA *nfa, const char *state,
const char *streamState, u64a offset,
nfaExpandState(nfa, fstate, sstate, offset, key);
}
- nfaCheckFinalState(nfa, fstate, sstate, offset, scratch->tctxt.cb,
- scratch->tctxt.cb_som, scratch->tctxt.userCtx);
+ if (nfaCheckFinalState(nfa, fstate, sstate, offset, scratch->tctxt.cb,
+ scratch->tctxt.cb_som,
+ scratch->tctxt.userCtx) == MO_HALT_MATCHING) {
+ DEBUG_PRINTF("user instructed us to stop\n");
+ return;
+ }
}
}
* history buffer. */
char rv = nfaQueueExecRose(q->nfa, q, MO_INVALID_IDX);
if (rv) { /* nfa is still alive */
- nfaCheckFinalState(nfa, fstate, sstate, offset, scratch->tctxt.cb,
- scratch->tctxt.cb_som, scratch->tctxt.userCtx);
+ if (nfaCheckFinalState(nfa, fstate, sstate, offset,
+ scratch->tctxt.cb, scratch->tctxt.cb_som,
+ scratch->tctxt.userCtx) ==
+ MO_HALT_MATCHING) {
+ DEBUG_PRINTF("user instructed us to stop\n");
+ return;
+ }
}
}
}