diff options
Diffstat (limited to 'src/buffer.c')
| -rw-r--r-- | src/buffer.c | 38 |
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; |
