|
@@ -12,6 +12,9 @@
|
|
|
#include "util.h"
|
|
|
#include "compat.h"
|
|
|
#include "torlog.h"
|
|
|
+#include "container.h"
|
|
|
+
|
|
|
+#ifndef DISABLE_MEMORY_SENTINELS
|
|
|
|
|
|
|
|
|
* memarea. */
|
|
@@ -304,3 +307,91 @@ memarea_assert_ok(memarea_t *area)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#else
|
|
|
+
|
|
|
+struct memarea_t {
|
|
|
+ smartlist_t *pieces;
|
|
|
+};
|
|
|
+
|
|
|
+memarea_t *
|
|
|
+memarea_new(void)
|
|
|
+{
|
|
|
+ memarea_t *ma = tor_malloc_zero(sizeof(memarea_t));
|
|
|
+ ma->pieces = smartlist_new();
|
|
|
+ return ma;
|
|
|
+}
|
|
|
+void
|
|
|
+memarea_drop_all(memarea_t *area)
|
|
|
+{
|
|
|
+ memarea_clear(area);
|
|
|
+ smartlist_free(area->pieces);
|
|
|
+ tor_free(area);
|
|
|
+}
|
|
|
+void
|
|
|
+memarea_clear(memarea_t *area)
|
|
|
+{
|
|
|
+ SMARTLIST_FOREACH(area->pieces, void *, p, tor_free_(p));
|
|
|
+ smartlist_clear(area->pieces);
|
|
|
+}
|
|
|
+int
|
|
|
+memarea_owns_ptr(const memarea_t *area, const void *ptr)
|
|
|
+{
|
|
|
+ SMARTLIST_FOREACH(area->pieces, const void *, p, if (ptr == p) return 1;);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+void *
|
|
|
+memarea_alloc(memarea_t *area, size_t sz)
|
|
|
+{
|
|
|
+ void *result = tor_malloc(sz);
|
|
|
+ smartlist_add(area->pieces, result);
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+void *
|
|
|
+memarea_alloc_zero(memarea_t *area, size_t sz)
|
|
|
+{
|
|
|
+ void *result = tor_malloc_zero(sz);
|
|
|
+ smartlist_add(area->pieces, result);
|
|
|
+ return result;
|
|
|
+}
|
|
|
+void *
|
|
|
+memarea_memdup(memarea_t *area, const void *s, size_t n)
|
|
|
+{
|
|
|
+ void *r = memarea_alloc(area, n);
|
|
|
+ memcpy(r, s, n);
|
|
|
+ return r;
|
|
|
+}
|
|
|
+char *
|
|
|
+memarea_strdup(memarea_t *area, const char *s)
|
|
|
+{
|
|
|
+ size_t n = strlen(s);
|
|
|
+ char *r = memarea_alloc(area, n+1);
|
|
|
+ memcpy(r, s, n);
|
|
|
+ r[n] = 0;
|
|
|
+ return r;
|
|
|
+}
|
|
|
+char *
|
|
|
+memarea_strndup(memarea_t *area, const char *s, size_t n)
|
|
|
+{
|
|
|
+ size_t ln = strnlen(s, n);
|
|
|
+ char *r = memarea_alloc(area, ln+1);
|
|
|
+ memcpy(r, s, ln);
|
|
|
+ r[ln] = 0;
|
|
|
+ return r;
|
|
|
+}
|
|
|
+void
|
|
|
+memarea_get_stats(memarea_t *area,
|
|
|
+ size_t *allocated_out, size_t *used_out)
|
|
|
+{
|
|
|
+ (void)area;
|
|
|
+ *allocated_out = *used_out = 128;
|
|
|
+}
|
|
|
+void
|
|
|
+memarea_assert_ok(memarea_t *area)
|
|
|
+{
|
|
|
+ (void)area;
|
|
|
+}
|
|
|
+
|
|
|
+#endif
|
|
|
+
|