summaryrefslogtreecommitdiff
path: root/src/buffer.c
diff options
context:
space:
mode:
authororoborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e>2008-02-01 22:59:06 +0000
committeroroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e>2008-02-01 22:59:06 +0000
commit6d4e1eae16b84918009625a866104ec26a234277 (patch)
treea340a8a547a60c9f63c8dfafe8909242f9c9bbd8 /src/buffer.c
nahranie tarballu tuxanci-ng na SVN server
Dusan Durech ( Oroborus ) git-svn-id: http://opensvn.csie.org/tuxanci_ng@1 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e
Diffstat (limited to 'src/buffer.c')
-rwxr-xr-xsrc/buffer.c120
1 files changed, 120 insertions, 0 deletions
diff --git a/src/buffer.c b/src/buffer.c
new file mode 100755
index 0000000..95fef9d
--- /dev/null
+++ b/src/buffer.c
@@ -0,0 +1,120 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#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;
+}
+
+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 0;
+ }
+
+ 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 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 getData(buffer_t *p, char *line, int len)
+{
+ assert( p != NULL );
+ assert( line != NULL );
+ assert( len >= 0 );
+
+ if( p->size < len)return -1;
+ 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);
+}
+
+/*
+int main()
+{
+ buffer_t *p;
+ char str[64];
+ char *s[] = {"hello world\n", "dalsi riadok\n", "koniec\n", NULL};
+ int i;
+
+ p = newBuffer(1024 * 10);
+
+ for( i = 0 ; s[i] != NULL ; i++)
+ addBuffer(p, s[i], strlen(s[i]));
+
+ while( getBufferLine(p, str, 64) > 0 )
+ {
+ printf("str = %s\n", str);
+ }
+
+ destroyBuffer(p);
+ return 0;
+}
+*/