#include #include #include #include "private.h" faux_chunk_t *faux_chunk_new(size_t size) { faux_chunk_t *chunk = NULL; if (0 == size) // Illegal 0 size return NULL; chunk = faux_zmalloc(sizeof(*chunk)); if (!chunk) return NULL; // Init chunk->buf = faux_zmalloc(size); if (!chunk->buf) { faux_free(chunk); return NULL; } chunk->size = size; chunk->start = chunk->buf; chunk->end = chunk->buf; return chunk; } void faux_chunk_free(faux_chunk_t *chunk) { // Without assert() if (!chunk) return; faux_free(chunk->buf); faux_free(chunk); } size_t faux_chunk_len(faux_chunk_t *chunk) { assert(chunk); if (!chunk) return 0; return (chunk->end - chunk->start); } ssize_t faux_chunk_inc_len(faux_chunk_t *chunk, size_t inc_len) { assert(chunk); if (!chunk) return -1; assert((faux_chunk_len(chunk) + inc_len) <= chunk->size); if ((faux_chunk_len(chunk) + inc_len) > chunk->size) return -1; chunk->end += inc_len; return faux_chunk_len(chunk); } ssize_t faux_chunk_dec_len(faux_chunk_t *chunk, size_t dec_len) { assert(chunk); if (!chunk) return -1; assert(faux_chunk_len(chunk) >= dec_len); if (faux_chunk_len(chunk) < dec_len) return -1; chunk->start += dec_len; return faux_chunk_len(chunk); } ssize_t faux_chunk_size(faux_chunk_t *chunk) { assert(chunk); if (!chunk) return -1; return chunk->size; } void *faux_chunk_buf(faux_chunk_t *chunk) { assert(chunk); if (!chunk) return NULL; return chunk->buf; } void *faux_chunk_write_pos(faux_chunk_t *chunk) { assert(chunk); if (!chunk) return NULL; return chunk->end; } void *faux_chunk_read_pos(faux_chunk_t *chunk) { assert(chunk); if (!chunk) return NULL; return chunk->start; } ssize_t faux_chunk_left(faux_chunk_t *chunk) { assert(chunk); if (!chunk) return -1; return (chunk->buf + chunk->size - chunk->end); }