gnunet

Main GNUnet Logic
Log | Files | Refs | Submodules | README | LICENSE

commit 4e259dbbba565c6f874ead9a8974175ffc6a2bb8
parent 1b5dfc396ced80c42516ab134e3fe4b340f08e2f
Author: Christian Grothoff <christian@grothoff.org>
Date:   Fri,  3 Apr 2020 15:05:14 +0200

fix #6153

Diffstat:
Msrc/include/gnunet_common.h | 18++++++++++++++----
Msrc/util/common_allocation.c | 20++++++++++++++++++++
2 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/src/include/gnunet_common.h b/src/include/gnunet_common.h @@ -1101,15 +1101,25 @@ 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. + * * @param a pointer to a struct which should be tested for the * entire memory being zero'ed out. * @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)) /** diff --git a/src/util/common_allocation.c b/src/util/common_allocation.c @@ -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 */