From 421f4ed1d6a80ccd072b9546ff37f2749a47c522 Mon Sep 17 00:00:00 2001 From: Jef Driesen Date: Thu, 3 Dec 2009 12:43:19 +0000 Subject: [PATCH] Add functions to search for markers in an array. --- src/array.c | 31 +++++++++++++++++++++++++++++++ src/array.h | 8 ++++++++ 2 files changed, 39 insertions(+) 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[]);