From 299170fa67ff3cf664cbcd2c95c4a85d0d6e699d Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Thu, 15 Oct 2015 13:59:43 +1030 Subject: [PATCH] mem: add memeqzero. Signed-off-by: Rusty Russell --- ccan/mem/mem.c | 13 +++++++++++++ ccan/mem/mem.h | 13 +++++++++++++ ccan/mem/test/api.c | 6 +++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/ccan/mem/mem.c b/ccan/mem/mem.c index 5b4b3508..2dfc72a5 100644 --- a/ccan/mem/mem.c +++ b/ccan/mem/mem.c @@ -88,3 +88,16 @@ void memswap(void *a, void *b, size_t n) n -= m; } } + +bool memeqzero(const void *data, size_t length) +{ + const unsigned char *p = data; + + while (length) { + if (*p) + return false; + p++; + length--; + } + return true; +} diff --git a/ccan/mem/mem.h b/ccan/mem/mem.h index 68a4aa3c..06a1b7a1 100644 --- a/ccan/mem/mem.h +++ b/ccan/mem/mem.h @@ -144,6 +144,19 @@ static inline bool memstarts(void const *data, size_t data_len, * } */ PURE_FUNCTION +bool memeqzero(const void *data, size_t length); + +/** + * memeqzero - Is a byte array all zeroes? + * @data: byte array + * @length: length of @data in bytes + * + * Example: + * if (memeqzero(somebytes, bytes_len)) { + * printf("somebytes == 0!\n"); + * } + */ +PURE_FUNCTION static inline bool memeqstr(const void *data, size_t length, const char *string) { return memeq(data, length, string, strlen(string)); diff --git a/ccan/mem/test/api.c b/ccan/mem/test/api.c index d820a38d..59b25947 100644 --- a/ccan/mem/test/api.c +++ b/ccan/mem/test/api.c @@ -18,7 +18,7 @@ int main(void) char tmp1[SWAPSIZE], tmp2[SWAPSIZE]; /* This is how many tests you plan to run */ - plan_tests(62); + plan_tests(65); ok1(memmem(haystack1, sizeof(haystack1), needle1, 2) == haystack1); ok1(memmem(haystack1, sizeof(haystack1), needle1, 3) == NULL); @@ -113,6 +113,10 @@ int main(void) ok1(memcmp(tmp1, haystack2, sizeof(haystack2)) == 0); ok1(memcmp(tmp2, haystack1, sizeof(haystack1)) == 0); + ok1(memeqzero(NULL, 0)); + ok1(memeqzero(scan2, 3)); + ok1(!memeqzero(scan2, 4)); + /* This exits depending on whether all tests passed */ return exit_status(); } -- 2.39.2