#include "notify.h"
#include "test_suite.h"
+/* If these ever need to be overridden... */
+void *(*buf_malloc_)(size_t) = malloc;
+void *(*buf_realloc_)(void *, size_t) = realloc;
+void (*buf_free_)(void *) = free;
+
inline
buf_t buf_new(size_t sz) {
- buf_t buf = malloc(sz + sizeof *buf);
+ buf_t buf = buf_malloc_(sz + sizeof *buf);
if (buf) {
buf->buf_sz = sz;
buf->buf_start = buf->buf_used = 0;
return buf;
}
+inline
+void buf_del(buf_t *pbuf) {
+ if (pbuf) {
+ if (*pbuf) {
+ buf_free_(*pbuf);
+ *pbuf = NULL;
+ }
+ }
+}
+
inline
void buf_rebase(buf_t buf) {
if (buf->buf_start == 0)
return 0;
new_sz = (*pbuf)->buf_used + roomfor;
- tmp_ptr = realloc(*pbuf, new_sz + sizeof **pbuf);
+ tmp_ptr = buf_realloc_(*pbuf, new_sz + sizeof **pbuf);
if (tmp_ptr == NULL) {
NOTIFY_ERROR("%s:%s", "realloc", strerror(errno));
return -1;
TEST_INFO("flensed: '%.*s'", (int)dst->buf_used, dst->buf + dst->buf_start);
memset(dst, 0, dst->buf_sz + sizeof *dst);
- free(dst);
- dst = NULL;
+ buf_del(&dst);
next_result++;
}
TEST_INFO("remains: '%.*s'", (int)src->buf_used, src->buf + src->buf_start);
memset(src, 0, src->buf_sz + sizeof *src);
- free(src);
- src = NULL;
+ buf_del(&src);
return retval;
}