/* * cleans the mb; last function to call if you do not give .buf away with * memBufFreeFunc */ void memBufClean(MemBuf * mb) { assert(mb); assert(mb->buf); assert(!mb->stolen); /* not frozen */ memFreeBuf(mb->capacity, mb->buf); mb->buf = NULL; mb->size = mb->capacity = mb->max_capacity = 0; }
static int free_data(void *data) { MemBuf * mb = (MemBuf*)data; if(NULL != mb && NULL != mb->buf) { memFreeBuf(mb->capacity, mb->buf); memPoolFree(text_mb_pool, mb); mb = NULL; } return 0; }
static void idnsTcpCleanup(idns_query * q) { if (q->tcp_socket != -1) { comm_close(q->tcp_socket); q->tcp_socket = -1; } if (q->tcp_buffer) { memFreeBuf(q->tcp_buffer_size, q->tcp_buffer); q->tcp_buffer = NULL; } }
/* resize a variable sized buffer using best-fit pool */ void * memReallocBuf(void *oldbuf, size_t net_size, size_t * gross_size) { /* XXX This can be optimized on very large buffers to use realloc() */ size_t new_gross_size; void *newbuf = memAllocBuf(net_size, &new_gross_size); if (oldbuf) { int data_size = *gross_size; if (data_size > net_size) data_size = net_size; memcpy(newbuf, oldbuf, data_size); memFreeBuf(*gross_size, oldbuf); } *gross_size = new_gross_size; return newbuf; }