From eb876a69e4d34771a7c614fa1355f4e902bd1abe Mon Sep 17 00:00:00 2001 From: Markus Teich Date: Sun, 9 Oct 2016 11:51:12 +0000 Subject: [PATCH] libgnunetutil: add file, line debug info to multidimensional array allocators --- src/include/gnunet_common.h | 14 ++++++++++---- src/util/common_allocation.c | 22 +++++++++++++++------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/include/gnunet_common.h b/src/include/gnunet_common.h index dfe8effcd..dcd0c6056 100644 --- a/src/include/gnunet_common.h +++ b/src/include/gnunet_common.h @@ -807,7 +807,7 @@ GNUNET_ntoh_double (double d); * @param m size of the second dimension * @param type name of the struct or union, i.e. pass 'struct Foo'. */ -#define GNUNET_new_array_2d(n, m, type) (type **) GNUNET_xnew_array_2d_ (n, m, sizeof (type)) +#define GNUNET_new_array_2d(n, m, type) (type **) GNUNET_xnew_array_2d_ (n, m, sizeof (type), __FILE__, __LINE__) /** * @ingroup memory @@ -819,7 +819,7 @@ GNUNET_ntoh_double (double d); * @param o size of the third dimension * @param type name of the struct or union, i.e. pass 'struct Foo'. */ -#define GNUNET_new_array_3d(n, m, o, type) (type ***) GNUNET_xnew_array_3d_ (n, m, o, sizeof (type)) +#define GNUNET_new_array_3d(n, m, o, type) (type ***) GNUNET_xnew_array_3d_ (n, m, o, sizeof (type), __FILE__, __LINE__) /** * @ingroup memory @@ -1001,10 +1001,13 @@ GNUNET_xmalloc_ (size_t size, const char *filename, int linenumber); * @param n size of the first dimension * @param m size of the second dimension * @param elementSize size of a single element in bytes + * @param filename where is this call being made (for debugging) + * @param linenumber line where this call is being made (for debugging) * @return allocated memory, never NULL */ void ** -GNUNET_xnew_array_2d_ (size_t n, size_t m, size_t elementSize); +GNUNET_xnew_array_2d_ (size_t n, size_t m, size_t elementSize, + const char *filename, int linenumber); /** @@ -1018,10 +1021,13 @@ GNUNET_xnew_array_2d_ (size_t n, size_t m, size_t elementSize); * @param m size of the second dimension * @param o size of the third dimension * @param elementSize size of a single element in bytes + * @param filename where is this call being made (for debugging) + * @param linenumber line where this call is being made (for debugging) * @return allocated memory, never NULL */ void *** -GNUNET_xnew_array_3d_ (size_t n, size_t m, size_t o, size_t elementSize); +GNUNET_xnew_array_3d_ (size_t n, size_t m, size_t o, size_t elementSize, + const char *filename, int linenumber); /** diff --git a/src/util/common_allocation.c b/src/util/common_allocation.c index f5b683569..71a2221ee 100644 --- a/src/util/common_allocation.c +++ b/src/util/common_allocation.c @@ -95,14 +95,18 @@ GNUNET_xmalloc_ (size_t size, * @param n size of the first dimension * @param m size of the second dimension * @param elementSize size of a single element in bytes + * @param filename where is this call being made (for debugging) + * @param linenumber line where this call is being made (for debugging) * @return allocated memory, never NULL */ void ** -GNUNET_xnew_array_2d_ (size_t n, size_t m, size_t elementSize) +GNUNET_xnew_array_2d_ (size_t n, size_t m, size_t elementSize, + const char *filename, int linenumber) { /* use char pointer internally to avoid void pointer arithmetic warnings */ - char **ret = GNUNET_malloc (n * sizeof (void *) + /* 1. dim header */ - n * m * elementSize); /* element data */ + char **ret = GNUNET_xmalloc_ (n * sizeof (void *) + /* 1. dim header */ + n * m * elementSize, /* element data */ + filename, linenumber); for (size_t i = 0; i < n; i++) ret[i] = (char *)ret + /* base address */ @@ -123,15 +127,19 @@ GNUNET_xnew_array_2d_ (size_t n, size_t m, size_t elementSize) * @param m size of the second dimension * @param o size of the third dimension * @param elementSize size of a single element in bytes + * @param filename where is this call being made (for debugging) + * @param linenumber line where this call is being made (for debugging) * @return allocated memory, never NULL */ void *** -GNUNET_xnew_array_3d_ (size_t n, size_t m, size_t o, size_t elementSize) +GNUNET_xnew_array_3d_ (size_t n, size_t m, size_t o, size_t elementSize, + const char *filename, int linenumber) { /* use char pointer internally to avoid void pointer arithmetic warnings */ - char ***ret = GNUNET_malloc (n * sizeof (void **) + /* 1. dim header */ - n * m * sizeof (void *) + /* 2. dim header */ - n * m * o * elementSize); /* element data */ + char ***ret = GNUNET_xmalloc_ (n * sizeof (void **) + /* 1. dim header */ + n * m * sizeof (void *) + /* 2. dim header */ + n * m * o * elementSize, /* element data */ + filename, linenumber); for (size_t i = 0; i < n; i++) { -- 2.25.1