i_assert(sizeof(*buffer) >= sizeof(struct real_buffer));
- buf = (struct real_buffer *)buffer;
+ buf = container_of(buffer, struct real_buffer, buf);
i_zero(buf);
buf->alloc = buf->max_size = size;
buf->r_buffer = buf->w_buffer = data;
i_assert(sizeof(*buffer) >= sizeof(struct real_buffer));
- buf = (struct real_buffer *)buffer;
+ buf = container_of(buffer, struct real_buffer, buf);
i_zero(buf);
buf->used = buf->alloc = buf->max_size = size;
init_size so we can actually write that much to the buffer without
realloc */
buffer_alloc(buf, init_size+1);
- return (buffer_t *)buf;
+ return &buf->buf;
}
void buffer_free(buffer_t **_buf)
{
- struct real_buffer *buf = (struct real_buffer *)*_buf;
+ struct real_buffer *buf = container_of(*_buf, struct real_buffer, buf);
if (buf == NULL)
return;
void *buffer_free_without_data(buffer_t **_buf)
{
- struct real_buffer *buf = (struct real_buffer *)*_buf;
+ struct real_buffer *buf = container_of(*_buf, struct real_buffer, buf);
void *data;
*_buf = NULL;
pool_t buffer_get_pool(const buffer_t *_buf)
{
- const struct real_buffer *buf = (const struct real_buffer *)_buf;
+ const struct real_buffer *buf =
+ container_of(_buf, const struct real_buffer, buf);
return buf->pool;
}
void buffer_write(buffer_t *_buf, size_t pos,
const void *data, size_t data_size)
{
- struct real_buffer *buf = (struct real_buffer *)_buf;
+ struct real_buffer *buf = container_of(_buf, struct real_buffer, buf);
buffer_check_limits(buf, pos, data_size);
if (data_size > 0)
void buffer_insert(buffer_t *_buf, size_t pos,
const void *data, size_t data_size)
{
- struct real_buffer *buf = (struct real_buffer *)_buf;
+ struct real_buffer *buf = container_of(_buf, struct real_buffer, buf);
if (pos >= buf->used)
buffer_write(_buf, pos, data, data_size);
void buffer_delete(buffer_t *_buf, size_t pos, size_t size)
{
- struct real_buffer *buf = (struct real_buffer *)_buf;
+ struct real_buffer *buf = container_of(_buf, struct real_buffer, buf);
size_t end_size;
if (pos >= buf->used)
void buffer_replace(buffer_t *_buf, size_t pos, size_t size,
const void *data, size_t data_size)
{
- struct real_buffer *buf = (struct real_buffer *)_buf;
+ struct real_buffer *buf = container_of(_buf, struct real_buffer, buf);
size_t end_size;
if (pos >= buf->used) {
void buffer_write_zero(buffer_t *_buf, size_t pos, size_t data_size)
{
- struct real_buffer *buf = (struct real_buffer *)_buf;
+ struct real_buffer *buf = container_of(_buf, struct real_buffer, buf);
buffer_check_limits(buf, pos, data_size);
memset(buf->w_buffer + pos, 0, data_size);
void buffer_insert_zero(buffer_t *_buf, size_t pos, size_t data_size)
{
- struct real_buffer *buf = (struct real_buffer *)_buf;
+ struct real_buffer *buf = container_of(_buf, struct real_buffer, buf);
if (pos >= buf->used)
buffer_write_zero(_buf, pos, data_size);
void buffer_copy(buffer_t *_dest, size_t dest_pos,
const buffer_t *_src, size_t src_pos, size_t copy_size)
{
- struct real_buffer *dest = (struct real_buffer *)_dest;
- const struct real_buffer *src = (const struct real_buffer *)_src;
+ struct real_buffer *dest = container_of(_dest, struct real_buffer, buf);
+ const struct real_buffer *src =
+ container_of(_src, const struct real_buffer, buf);
size_t max_size;
i_assert(src_pos <= src->used);
void *buffer_get_space_unsafe(buffer_t *_buf, size_t pos, size_t size)
{
- struct real_buffer *buf = (struct real_buffer *)_buf;
+ struct real_buffer *buf = container_of(_buf, struct real_buffer, buf);
buffer_check_limits(buf, pos, size);
return buf->w_buffer + pos;
void *buffer_get_modifiable_data(const buffer_t *_buf, size_t *used_size_r)
{
- const struct real_buffer *buf = (const struct real_buffer *)_buf;
+ const struct real_buffer *buf =
+ container_of(_buf, const struct real_buffer, buf);
if (used_size_r != NULL)
*used_size_r = buf->used;
void buffer_set_used_size(buffer_t *_buf, size_t used_size)
{
- struct real_buffer *buf = (struct real_buffer *)_buf;
+ struct real_buffer *buf = container_of(_buf, struct real_buffer, buf);
i_assert(used_size <= buf->alloc);
size_t buffer_get_size(const buffer_t *_buf)
{
- const struct real_buffer *buf = (const struct real_buffer *)_buf;
+ const struct real_buffer *buf =
+ container_of(_buf, const struct real_buffer, buf);
return buf->alloc;
}
size_t buffer_get_writable_size(const buffer_t *_buf)
{
- const struct real_buffer *buf = (const struct real_buffer *)_buf;
+ const struct real_buffer *buf =
+ container_of(_buf, const struct real_buffer, buf);
if (!buf->dynamic || buf->alloc == 0)
return buf->alloc;
size_t buffer_get_avail_size(const buffer_t *_buf)
{
- const struct real_buffer *buf = (const struct real_buffer *)_buf;
+ const struct real_buffer *buf =
+ container_of(_buf, const struct real_buffer, buf);
i_assert(buf->alloc >= buf->used);
return ((buf->dynamic ? SIZE_MAX : buf->alloc) - buf->used);
void buffer_verify_pool(buffer_t *_buf)
{
- const struct real_buffer *buf = (const struct real_buffer *)_buf;
+ const struct real_buffer *buf =
+ container_of(_buf, struct real_buffer, buf);
void *ret;
if (buf->pool != NULL && buf->pool->datastack_pool && buf->alloc > 0) {