From e12753d2ec9db83ec08bb9db63902a82fb245cdd Mon Sep 17 00:00:00 2001 From: "Tomas Chvatal (scarabeus)" Date: Wed, 22 Oct 2008 22:50:54 +0200 Subject: X --- src/base/buffer.c~ | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 src/base/buffer.c~ (limited to 'src/base/buffer.c~') diff --git a/src/base/buffer.c~ b/src/base/buffer.c~ new file mode 100644 index 0000000..263037b --- /dev/null +++ b/src/base/buffer.c~ @@ -0,0 +1,137 @@ + +#include +#include +#include +#include + +#include "buffer.h" + +buffer_t * newBuffer(int n) +{ + buffer_t *new; + + new = malloc(sizeof(buffer_t)); + memset(new, 0, sizeof(buffer_t)); + new->alloc = n; + new->data = malloc(n); + memset(new->data , 0, n); + + return new; +} + +void* getBufferData(buffer_t *p) +{ + return p->data; +} + +int getBufferSize(buffer_t *p) +{ + return p->size; +} + +int addBuffer(buffer_t *p, char *data, int len) +{ + assert( p != NULL ); + assert( data != NULL ); + assert( len >= 0 ); + + if( p->size + len <= p->alloc ) + { + memcpy(p->data + p->size, data, len); + p->size += len; + return len; + } + + return -1; +} + +int cutBuffer(buffer_t *p, int len) +{ + assert( p != NULL ); + assert( len >= 0 ); + + if( p->size - len >= 0 ) + { + memmove(p->data, p->data + len, p->size - len); + p->size -= len; + return 0; + } + + return -1; +} + +int getBufferCount(buffer_t *p) +{ + char *begin; + char *end; + int count; + int size; + + assert( p != NULL ); + + count = 0; + begin = p->data; + size = p->size; + + while( ( end = memchr(begin, '\n', size) ) != NULL ) + { + count++; + size -= ( (end+1) - begin); + begin = end+1; + } + + //printf("count = %d\n", count); + //printf("data = %s\n", p->data); + return count; +} + +int getBufferLine(buffer_t *p, char *line, int len) +{ + char *end; + int ret_len; + + assert( p != NULL ); + assert( line != NULL ); + assert( len >= 0 ); + + end = NULL; + + end = memchr(p->data, '\n', p->size); + + if( end == NULL ) return -1; + + ret_len = (int) (end - p->data)+1; + if( ret_len > len-1 ) ret_len = len-1; + + memset(line, 0, len); + memcpy(line, p->data, ret_len); + + cutBuffer(p, ret_len); + + return ret_len; +} + +int getBufferDataLen(buffer_t *p, char *line, int len) +{ + assert( p != NULL ); + assert( line != NULL ); + assert( len >= 0 ); + + if( p->size < len ) + { + len = p->size; + } + + memcpy(line, p->data, len); + cutBuffer(p, len); + + return len; +} + +void destroyBuffer(buffer_t *p) +{ + assert( p != NULL ); + + if( p->data != NULL )free(p->data); + free(p); +} -- cgit v1.2.3