aboutsummaryrefslogtreecommitdiff
path: root/src/buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/buffer.c')
-rw-r--r--src/buffer.c38
1 files changed, 17 insertions, 21 deletions
diff --git a/src/buffer.c b/src/buffer.c
index c66c6ae..71e2ee9 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -35,25 +35,29 @@ bh_buffer_t *bh_buffer_new(void)
void bh_buffer_free(bh_buffer_t *buffer)
{
+ /* Destroy buffer and free the memory */
bh_buffer_destroy(buffer);
free(buffer);
}
int bh_buffer_init(bh_buffer_t *buffer)
{
+ /* Initialize underlying io object */
bh_io_init(&buffer->base, &bh_buffer_table);
+ /* Setup internal information */
buffer->data = NULL;
buffer->capacity = 0;
buffer->size = 0;
buffer->at = 0;
- buffer->mode = 0;
+ buffer->mode = BH_IO_NONE;
return BH_OK;
}
void bh_buffer_destroy(bh_buffer_t *buffer)
{
+ /* Close the buffer and free allocated memory */
bh_buffer_close(buffer);
if (buffer->data)
free(buffer->data);
@@ -68,7 +72,9 @@ void bh_buffer_set_data(bh_buffer_t *buffer,
const char *data,
size_t size)
{
+ /* Reset size and at position and write new data */
buffer->size = 0;
+ buffer->at = 0;
bh_buffer_write_base(buffer, data, size);
}
@@ -117,39 +123,27 @@ int bh_buffer_open_base(bh_buffer_t *buffer,
int mode)
{
/* Check if buffer is already open */
- if (buffer->mode != 0)
+ if (buffer->mode != BH_IO_NONE)
return BH_OK;
/* Update buffer mode field */
buffer->mode = mode;
/* Determine open mode */
- switch (mode & BH_IO_MASK)
- {
- case BH_IO_OPEN:
- case BH_IO_CREATE:
- case BH_IO_APPEND:
- break;
-
- case BH_IO_TRUNCATE:
+ if (mode & BH_IO_TRUNCATE)
buffer->size = 0;
- break;
-
- default:
- return BH_NO_IMPL;
- }
return BH_OK;
}
void bh_buffer_close_base(bh_buffer_t *buffer)
{
- buffer->mode = 0;
+ buffer->mode = BH_IO_NONE;
}
int bh_buffer_is_open_base(bh_buffer_t *buffer)
{
- return buffer->mode != 0;
+ return buffer->mode != BH_IO_NONE;
}
size_t bh_buffer_read_base(bh_buffer_t *buffer,
@@ -197,7 +191,7 @@ size_t bh_buffer_write_base(bh_buffer_t *buffer,
}
/* Adjust at position */
- if ((buffer->mode & BH_IO_MASK) == BH_IO_APPEND)
+ if (buffer->mode & BH_IO_APPEND)
buffer->at = buffer->size;
/* Calculate required capacity and check for overflow */
@@ -242,14 +236,16 @@ int bh_buffer_seek_base(bh_buffer_t *buffer,
bh_off_t pos,
int dir)
{
+ /* Depending on the direction set at position */
switch (dir)
{
- case BH_IO_SET: buffer->at = pos; break;
+ case BH_IO_SET: buffer->at = pos; break;
case BH_IO_CURRENT: buffer->at += pos; break;
- case BH_IO_END: buffer->at = buffer->size - pos; break;
- default: return BH_NO_IMPL;
+ case BH_IO_END: buffer->at = buffer->size - pos; break;
+ default: return BH_NO_IMPL;
}
+ /* Make sure at position is in valid range */
if (buffer->at > buffer->size)
buffer->at = buffer->size;