mem: add memeqzero.
authorRusty Russell <rusty@rustcorp.com.au>
Thu, 15 Oct 2015 03:29:43 +0000 (13:59 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Thu, 15 Oct 2015 03:29:43 +0000 (13:59 +1030)
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
ccan/mem/mem.c
ccan/mem/mem.h
ccan/mem/test/api.c

index 5b4b3508090dfb10dc7eea9236eb42ed54b92834..2dfc72a506209511c0d61901024a470a28472d84 100644 (file)
@@ -88,3 +88,16 @@ void memswap(void *a, void *b, size_t n)
                n -= m;
        }
 }
                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;
+}
index 68a4aa3c18885c207a9fd11828bc5174bead6905..06a1b7a1f2411150147d043cc0bfdbf7635967e8 100644 (file)
@@ -144,6 +144,19 @@ static inline bool memstarts(void const *data, size_t data_len,
  *     }
  */
 PURE_FUNCTION
  *     }
  */
 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));
 static inline bool memeqstr(const void *data, size_t length, const char *string)
 {
        return memeq(data, length, string, strlen(string));
index d820a38ddf35bd9ed68097d681ebf02bb8de40e0..59b25947ab0a96d5c15de578608d7a244f331708 100644 (file)
@@ -18,7 +18,7 @@ int main(void)
        char tmp1[SWAPSIZE], tmp2[SWAPSIZE];
 
        /* This is how many tests you plan to run */
        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);
 
        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(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();
 }
        /* This exits depending on whether all tests passed */
        return exit_status();
 }