#include "randomness.h"
#include "test_suite.h"
+/* If these ever need to be overridden.. */
+void *(*reservoir_malloc_)(size_t) = malloc;
+void *(*reservoir_realloc_)(void *, size_t) = realloc;
+void (*reservoir_free_)(void *) = free;
+
reservoir_t reservoir_new(size_t sz) {
reservoir_t reservoir;
- reservoir = malloc((sz * sizeof *reservoir->reservoir) + sizeof *reservoir);
+ reservoir = reservoir_malloc_((sz * sizeof *reservoir->reservoir) + sizeof *reservoir);
if (reservoir == NULL) {
NOTIFY_ERROR("%s:%s", "malloc", strerror(errno));
return NULL;
return reservoir;
}
+void reservoir_del(reservoir_t *preservoir) {
+ if (preservoir) {
+ if (*preservoir) {
+ while ((*preservoir)->reservoir_used) {
+ (*preservoir)->reservoir_used -= 1;
+ buf_del(&((*preservoir)->reservoir[(*preservoir)->reservoir_used]));
+ }
+ reservoir_free_(*preservoir);
+ *preservoir = NULL;
+ }
+ }
+}
+
int reservoir_grow(reservoir_t *preservoir, size_t growby) {
assert(preservoir != NULL);
if (growby) {
- void *tmp_ptr = realloc(*preservoir, (((*preservoir)->reservoir_sz + growby) * sizeof *(*preservoir)->reservoir) + sizeof **preservoir);
+ void *tmp_ptr = reservoir_realloc_(*preservoir, (((*preservoir)->reservoir_sz + growby) * sizeof *(*preservoir)->reservoir) + sizeof **preservoir);
if (tmp_ptr == NULL) {
NOTIFY_ERROR("%s:%s", "realloc", strerror(errno));
return -1;
if (old_buf != NULL) {
D_BUF("FREEING ", old_buf);
memset(old_buf, 0, old_buf->buf_sz + sizeof *old_buf);
- free(old_buf);
+ buf_del(&old_buf);
+ assert(old_buf == NULL);
}
D_RESERVOIR(reservoir);