Add utilities functions.

This commit is contained in:
bossiel 2010-02-09 00:38:48 +00:00
parent 0571522c2d
commit 74f88edc7c
2 changed files with 70 additions and 2 deletions

View File

@ -117,13 +117,78 @@ int tsk_buffer_append(tsk_buffer_t* self, const void* data, size_t size)
return -1;
}
void tsk_buffer_cleanup(tsk_buffer_t* self)
int tsk_buffer_realloc(tsk_buffer_t* self, size_t size)
{
if(self)
{
if(size == 0){
return tsk_buffer_cleanup(self);
}
if(self->size == 0){
self->data = tsk_calloc(size, sizeof(uint8_t));
}
else{
self->data = tsk_realloc(self->data, size);
}
self->size = size;
return 0;
}
return -1;
}
int tsk_buffer_remove(tsk_buffer_t* self, size_t position, size_t size)
{
if(self)
{
if((position + size) > self->size)
{
size = self->size - position;
memcpy(((uint8_t*)self->data) + position, ((uint8_t*)self->data) + position + size,
self->size-(position+size));
return tsk_buffer_realloc(self, (self->size-size));
}
}
return -1;
}
int tsk_buffer_insert(tsk_buffer_t* self, size_t position, const void*data, size_t size)
{
if(self && size)
{
int ret;
if(position > self->size){
return -2;
}
if((ret = tsk_buffer_realloc(self, (self->size + size)))){
return ret;
}
memmove(((uint8_t*)self->data) + position + size, ((uint8_t*)self->data) + position,
self->size - (position + size));
if(data){
memcpy(((uint8_t*)self->data) + position, data, size);
}
else{
memset(((uint8_t*)self->data) + position, 0, size);
}
return 0;
}
return -1;
}
int tsk_buffer_cleanup(tsk_buffer_t* self)
{
if(self && self->data)
{
tsk_free(&(self->data));
self->size = 0;
}
return 0;
}

View File

@ -58,7 +58,10 @@ typedef tsk_list_t tsk_buffers_L_t; /**< List of @ref tsk_buffer_t elements. */
TINYSAK_API int tsk_buffer_appendEx(tsk_buffer_t* self, const char* format, ...);
TINYSAK_API int tsk_buffer_append(tsk_buffer_t* self, const void* data, size_t size);
TINYSAK_API void tsk_buffer_cleanup(tsk_buffer_t* self);
TINYSAK_API int tsk_buffer_realloc(tsk_buffer_t* self, size_t size);
TINYSAK_API int tsk_buffer_remove(tsk_buffer_t* self, size_t position, size_t size);
TINYSAK_API int tsk_buffer_insert(tsk_buffer_t* self, size_t position, const void*data, size_t size);
TINYSAK_API int tsk_buffer_cleanup(tsk_buffer_t* self);
TINYSAK_GEXTERN const void *tsk_buffer_def_t;