]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
memory-util: replace memeqzero() by a more generic memeqbyte()
authorLennart Poettering <lennart@poettering.net>
Mon, 13 Sep 2021 10:33:21 +0000 (12:33 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 13 Sep 2021 10:48:27 +0000 (12:48 +0200)
The new helper can check for any byte, no just zeroes. The old name is
then converted into a macro that wraps our new version of the helper.

src/basic/memory-util.c
src/basic/memory-util.h

index 3338e355f7b6ce7b62ef708377cec05995d622e6..298376211761b4dd43e59b8f9f901b15b4492545 100644 (file)
@@ -18,26 +18,25 @@ size_t page_size(void) {
         return pgsz;
 }
 
-bool memeqzero(const void *data, size_t length) {
-        /* Does the buffer consist entirely of NULs?
+bool memeqbyte(uint8_t byte, const void *data, size_t length) {
+        /* Does the buffer consist entirely of the same specific byte value?
          * Copied from https://github.com/systemd/casync/, copied in turn from
          * https://github.com/rustyrussell/ccan/blob/master/ccan/mem/mem.c#L92,
          * which is licensed CC-0.
          */
 
         const uint8_t *p = data;
-        size_t i;
 
         /* Check first 16 bytes manually */
-        for (i = 0; i < 16; i++, length--) {
+        for (size_t i = 0; i < 16; i++, length--) {
                 if (length == 0)
                         return true;
-                if (p[i])
+                if (p[i] != byte)
                         return false;
         }
 
-        /* Now we know first 16 bytes are NUL, memcmp with self.  */
-        return memcmp(data, p + i, length) == 0;
+        /* Now we know first 16 bytes match, memcmp() with self.  */
+        return memcmp(data, p + 16, length) == 0;
 }
 
 #if !HAVE_EXPLICIT_BZERO
index e2b543cb8f26a95120dee151388468f347749223..9f37431fc19afc7046cb36abe95326b0cd5fecaa 100644 (file)
@@ -47,7 +47,9 @@ static inline int memcmp_nn(const void *s1, size_t n1, const void *s2, size_t n2
 
 #define zero(x) (memzero(&(x), sizeof(x)))
 
-bool memeqzero(const void *data, size_t length);
+bool memeqbyte(uint8_t byte, const void *data, size_t length);
+
+#define memeqzero(data, length) memeqbyte(0x00, data, length)
 
 #define eqzero(x) memeqzero(x, sizeof(x))