diff --git a/src/array.c b/src/array.c index 5c1763e..ab2947f 100644 --- a/src/array.c +++ b/src/array.c @@ -19,6 +19,8 @@ * MA 02110-1301 USA */ +#include + #include "array.h" void @@ -62,6 +64,35 @@ array_isequal (const unsigned char data[], unsigned int size, unsigned char valu } +const unsigned char * +array_search_forward (const unsigned char *data, unsigned int size, + const unsigned char *marker, unsigned int msize) +{ + while (size >= msize) { + if (memcmp (data, marker, msize) == 0) + return data; + size--; + data++; + } + return NULL; +} + + +const unsigned char * +array_search_backward (const unsigned char *data, unsigned int size, + const unsigned char *marker, unsigned int msize) +{ + data += size; + while (size >= msize) { + if (memcmp (data - msize, marker, msize) == 0) + return data; + size--; + data--; + } + return NULL; +} + + unsigned int array_uint32_be (const unsigned char data[]) { diff --git a/src/array.h b/src/array.h index 2739e70..add8e57 100644 --- a/src/array.h +++ b/src/array.h @@ -35,6 +35,14 @@ array_reverse_bits (unsigned char data[], unsigned int size); int array_isequal (const unsigned char data[], unsigned int size, unsigned char value); +const unsigned char * +array_search_forward (const unsigned char *data, unsigned int size, + const unsigned char *marker, unsigned int msize); + +const unsigned char * +array_search_backward (const unsigned char *data, unsigned int size, + const unsigned char *marker, unsigned int msize); + unsigned int array_uint32_be (const unsigned char data[]);