wsutil: Add a reverse mempbrk function

This commit is contained in:
John Thacker 2023-10-11 09:07:41 -04:00 committed by AndersBroman
parent 0cec46bb25
commit a6f3e61d70
3 changed files with 21 additions and 0 deletions

View File

@ -491,6 +491,7 @@ libwsutil.so.0 libwsutil0 #MINVER#
ws_mempbrk_compile@Base 1.99.4
ws_mempbrk_exec@Base 1.99.4
ws_memrchr@Base 4.3.0rc0
ws_memrpbrk_exec@Base 4.3.0rc0
ws_optarg@Base 3.5.1
ws_opterr@Base 3.5.1
ws_optind@Base 3.5.1

View File

@ -72,6 +72,21 @@ ws_mempbrk_exec(const uint8_t* haystack, size_t haystacklen, const ws_mempbrk_pa
return ws_mempbrk_portable_exec(haystack, haystacklen, pattern, found_needle);
}
WS_DLL_PUBLIC const uint8_t *
ws_memrpbrk_exec(const uint8_t* haystack, size_t haystacklen, const ws_mempbrk_pattern* pattern, unsigned char *found_needle)
{
const uint8_t *haystack_end = haystack + haystacklen;
while (haystack_end > haystack) {
if (pattern->patt[*(--haystack_end)]) {
if (found_needle)
*found_needle = *haystack_end;
return haystack_end;
}
}
return NULL;
}
/*
* Editor modelines - https://www.wireshark.org/tools/modelines.html

View File

@ -34,4 +34,9 @@ WS_DLL_PUBLIC void ws_mempbrk_compile(ws_mempbrk_pattern* pattern, const char *n
*/
WS_DLL_PUBLIC const uint8_t *ws_mempbrk_exec(const uint8_t* haystack, size_t haystacklen, const ws_mempbrk_pattern* pattern, unsigned char *found_needle);
/** Scan for the needles specified by the compiled pattern, starting at the
* end of the haystack and working backwards.
*/
WS_DLL_PUBLIC const uint8_t *ws_memrpbrk_exec(const uint8_t* haystack, size_t haystacklen, const ws_mempbrk_pattern* pattern, unsigned char *found_needle);
#endif /* __WS_MEMPBRK_H__ */