aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarkus Teich <teichm@fs.tum.de>2016-10-09 11:51:12 +0000
committerMarkus Teich <teichm@fs.tum.de>2016-10-09 11:51:12 +0000
commiteb876a69e4d34771a7c614fa1355f4e902bd1abe (patch)
treecba68e08d575ed01b5d7441b4323c617d2e7c45a /src
parentc9f2b5e884cac0605dd9f2931c7154fb94baeb84 (diff)
downloadgnunet-eb876a69e4d34771a7c614fa1355f4e902bd1abe.tar.gz
gnunet-eb876a69e4d34771a7c614fa1355f4e902bd1abe.zip
libgnunetutil: add file, line debug info to multidimensional array allocators
Diffstat (limited to 'src')
-rw-r--r--src/include/gnunet_common.h14
-rw-r--r--src/util/common_allocation.c22
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);
807 * @param m size of the second dimension 807 * @param m size of the second dimension
808 * @param type name of the struct or union, i.e. pass 'struct Foo'. 808 * @param type name of the struct or union, i.e. pass 'struct Foo'.
809 */ 809 */
810#define GNUNET_new_array_2d(n, m, type) (type **) GNUNET_xnew_array_2d_ (n, m, sizeof (type)) 810#define GNUNET_new_array_2d(n, m, type) (type **) GNUNET_xnew_array_2d_ (n, m, sizeof (type), __FILE__, __LINE__)
811 811
812/** 812/**
813 * @ingroup memory 813 * @ingroup memory
@@ -819,7 +819,7 @@ GNUNET_ntoh_double (double d);
819 * @param o size of the third dimension 819 * @param o size of the third dimension
820 * @param type name of the struct or union, i.e. pass 'struct Foo'. 820 * @param type name of the struct or union, i.e. pass 'struct Foo'.
821 */ 821 */
822#define GNUNET_new_array_3d(n, m, o, type) (type ***) GNUNET_xnew_array_3d_ (n, m, o, sizeof (type)) 822#define GNUNET_new_array_3d(n, m, o, type) (type ***) GNUNET_xnew_array_3d_ (n, m, o, sizeof (type), __FILE__, __LINE__)
823 823
824/** 824/**
825 * @ingroup memory 825 * @ingroup memory
@@ -1001,10 +1001,13 @@ GNUNET_xmalloc_ (size_t size, const char *filename, int linenumber);
1001 * @param n size of the first dimension 1001 * @param n size of the first dimension
1002 * @param m size of the second dimension 1002 * @param m size of the second dimension
1003 * @param elementSize size of a single element in bytes 1003 * @param elementSize size of a single element in bytes
1004 * @param filename where is this call being made (for debugging)
1005 * @param linenumber line where this call is being made (for debugging)
1004 * @return allocated memory, never NULL 1006 * @return allocated memory, never NULL
1005 */ 1007 */
1006void ** 1008void **
1007GNUNET_xnew_array_2d_ (size_t n, size_t m, size_t elementSize); 1009GNUNET_xnew_array_2d_ (size_t n, size_t m, size_t elementSize,
1010 const char *filename, int linenumber);
1008 1011
1009 1012
1010/** 1013/**
@@ -1018,10 +1021,13 @@ GNUNET_xnew_array_2d_ (size_t n, size_t m, size_t elementSize);
1018 * @param m size of the second dimension 1021 * @param m size of the second dimension
1019 * @param o size of the third dimension 1022 * @param o size of the third dimension
1020 * @param elementSize size of a single element in bytes 1023 * @param elementSize size of a single element in bytes
1024 * @param filename where is this call being made (for debugging)
1025 * @param linenumber line where this call is being made (for debugging)
1021 * @return allocated memory, never NULL 1026 * @return allocated memory, never NULL
1022 */ 1027 */
1023void *** 1028void ***
1024GNUNET_xnew_array_3d_ (size_t n, size_t m, size_t o, size_t elementSize); 1029GNUNET_xnew_array_3d_ (size_t n, size_t m, size_t o, size_t elementSize,
1030 const char *filename, int linenumber);
1025 1031
1026 1032
1027/** 1033/**
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,
95 * @param n size of the first dimension 95 * @param n size of the first dimension
96 * @param m size of the second dimension 96 * @param m size of the second dimension
97 * @param elementSize size of a single element in bytes 97 * @param elementSize size of a single element in bytes
98 * @param filename where is this call being made (for debugging)
99 * @param linenumber line where this call is being made (for debugging)
98 * @return allocated memory, never NULL 100 * @return allocated memory, never NULL
99 */ 101 */
100void ** 102void **
101GNUNET_xnew_array_2d_ (size_t n, size_t m, size_t elementSize) 103GNUNET_xnew_array_2d_ (size_t n, size_t m, size_t elementSize,
104 const char *filename, int linenumber)
102{ 105{
103 /* use char pointer internally to avoid void pointer arithmetic warnings */ 106 /* use char pointer internally to avoid void pointer arithmetic warnings */
104 char **ret = GNUNET_malloc (n * sizeof (void *) + /* 1. dim header */ 107 char **ret = GNUNET_xmalloc_ (n * sizeof (void *) + /* 1. dim header */
105 n * m * elementSize); /* element data */ 108 n * m * elementSize, /* element data */
109 filename, linenumber);
106 110
107 for (size_t i = 0; i < n; i++) 111 for (size_t i = 0; i < n; i++)
108 ret[i] = (char *)ret + /* base address */ 112 ret[i] = (char *)ret + /* base address */
@@ -123,15 +127,19 @@ GNUNET_xnew_array_2d_ (size_t n, size_t m, size_t elementSize)
123 * @param m size of the second dimension 127 * @param m size of the second dimension
124 * @param o size of the third dimension 128 * @param o size of the third dimension
125 * @param elementSize size of a single element in bytes 129 * @param elementSize size of a single element in bytes
130 * @param filename where is this call being made (for debugging)
131 * @param linenumber line where this call is being made (for debugging)
126 * @return allocated memory, never NULL 132 * @return allocated memory, never NULL
127 */ 133 */
128void *** 134void ***
129GNUNET_xnew_array_3d_ (size_t n, size_t m, size_t o, size_t elementSize) 135GNUNET_xnew_array_3d_ (size_t n, size_t m, size_t o, size_t elementSize,
136 const char *filename, int linenumber)
130{ 137{
131 /* use char pointer internally to avoid void pointer arithmetic warnings */ 138 /* use char pointer internally to avoid void pointer arithmetic warnings */
132 char ***ret = GNUNET_malloc (n * sizeof (void **) + /* 1. dim header */ 139 char ***ret = GNUNET_xmalloc_ (n * sizeof (void **) + /* 1. dim header */
133 n * m * sizeof (void *) + /* 2. dim header */ 140 n * m * sizeof (void *) + /* 2. dim header */
134 n * m * o * elementSize); /* element data */ 141 n * m * o * elementSize, /* element data */
142 filename, linenumber);
135 143
136 for (size_t i = 0; i < n; i++) 144 for (size_t i = 0; i < n; i++)
137 { 145 {