|
@@ -69,7 +69,10 @@ const char util_c_id[] = "$Id$";
|
|
|
#ifdef HAVE_TIME_H
|
|
|
#include <time.h>
|
|
|
#endif
|
|
|
-#if defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO)
|
|
|
+#ifdef HAVE_MALLOC_MALLOC_H
|
|
|
+#include <malloc/malloc.h>
|
|
|
+#endif
|
|
|
+#ifdef HAVE_MALLOC_H
|
|
|
#include <malloc.h>
|
|
|
#endif
|
|
|
|
|
@@ -221,6 +224,26 @@ _tor_free(void *mem)
|
|
|
tor_free(mem);
|
|
|
}
|
|
|
|
|
|
+/** Allocate and return a chunk of memory of size at least *<b>size</p>, using
|
|
|
+ * the same resources we would use to malloc *<b>sizep</b>. Set *<b>sizep</b>
|
|
|
+ * to the number of usable bytes in the chunk of memory. */
|
|
|
+void *
|
|
|
+_tor_malloc_roundup(size_t *sizep DMALLOC_PARAMS)
|
|
|
+{
|
|
|
+#ifdef HAVE_MALLOC_GOOD_SIZE
|
|
|
+ *sizep = malloc_good_size(*sizep);
|
|
|
+ return _tor_malloc(*sizep DMALLOC_FN_ARGS);
|
|
|
+#else
|
|
|
+#if defined(HAVE_MALLOC_USABLE_SIZE) && !defined(USE_DMALLOC)
|
|
|
+ void *result = _tor_malloc(*sizep DMALLOC_FN_ARGS);
|
|
|
+ *sizep = malloc_usable_size(result);
|
|
|
+ return result;
|
|
|
+#else
|
|
|
+ return _tor_malloc(*sizep);
|
|
|
+#endif
|
|
|
+#endif
|
|
|
+}
|
|
|
+
|
|
|
/** Call the platform malloc info function, and dump the results to the log at
|
|
|
* level <b>severity</b>. If no such function exists, do nothing. */
|
|
|
void
|