fix #6153
authorChristian Grothoff <christian@grothoff.org>
Fri, 3 Apr 2020 13:05:14 +0000 (15:05 +0200)
committerChristian Grothoff <christian@grothoff.org>
Fri, 3 Apr 2020 13:05:14 +0000 (15:05 +0200)
src/include/gnunet_common.h
src/util/common_allocation.c

index 6e185c314ae661fa5af25de251549c37bed8745b..6d9652a168561ad3fe21569cea703834922133fd 100644 (file)
@@ -1098,6 +1098,19 @@ GNUNET_ntoh_double (double d);
   })
 
 
+/**
+ * Check that memory in @a a is all zeros. @a a must be a pointer.
+ *
+ * @param a pointer to @a n bytes which should be tested for the
+ *          entire memory being zero'ed out.
+ * @param n number of bytes in @a to be tested
+ * @return 0 if a is zero, non-zero otherwise
+ */
+int
+GNUNET_is_zero_ (const void *a,
+                 size_t n);
+
+
 /**
  * Check that memory in @a a is all zeros. @a a must be a pointer.
  *
@@ -1106,10 +1119,7 @@ GNUNET_ntoh_double (double d);
  * @return 0 if a is zero, non-zero otherwise
  */
 #define GNUNET_is_zero(a)           \
-  ({                                \
-    static const typeof (*a) _z;    \
-    memcmp ((a), &_z, sizeof(_z)); \
-  })
+  GNUNET_is_zero_ (a, sizeof (a))
 
 
 /**
index 35c557000bf89c193dbdcf907cf87a69ad9fb701..5945fdcdef283ab965609f196b3b2f402901338c 100644 (file)
@@ -533,4 +533,24 @@ GNUNET_copy_message (const struct GNUNET_MessageHeader *msg)
 }
 
 
+/**
+ * Check that memory in @a a is all zeros. @a a must be a pointer.
+ *
+ * @param a pointer to @a n bytes which should be tested for the
+ *          entire memory being zero'ed out.
+ * @param n number of bytes in @a to be tested
+ * @return 0 if a is zero, non-zero otherwise
+ */
+int
+GNUNET_is_zero_ (const void *a,
+                 size_t n)
+{
+  const char *b = a;
+  for (size_t i = 0; i < n; i++)
+    if (b[i])
+      return 0;
+  return 1;
+}
+
+
 /* end of common_allocation.c */