summaryrefslogtreecommitdiff
path: root/libbuf/buf_misc.c
diff options
context:
space:
mode:
authorFreeArtMan <dos21h@gmail.com>2019-09-25 19:17:09 +0100
committerFreeArtMan <dos21h@gmail.com>2019-09-25 19:17:09 +0100
commit3e187c094f12ef41ea6de2f55d128c3e037b5c12 (patch)
treef0dbbc5df260532e284ca5264297d0a8044eaeb4 /libbuf/buf_misc.c
parentbbd73385a0db271b457c63e4d6bab54f581410f9 (diff)
downloadihe-3e187c094f12ef41ea6de2f55d128c3e037b5c12.tar.gz
ihe-3e187c094f12ef41ea6de2f55d128c3e037b5c12.zip
Untested version, recompiled with new buf library and with c+
Diffstat (limited to 'libbuf/buf_misc.c')
-rw-r--r--libbuf/buf_misc.c272
1 files changed, 272 insertions, 0 deletions
diff --git a/libbuf/buf_misc.c b/libbuf/buf_misc.c
new file mode 100644
index 0000000..386be72
--- /dev/null
+++ b/libbuf/buf_misc.c
@@ -0,0 +1,272 @@
+#include "buf_misc.h"
+
+/*
+int bbuf_line_new(bbuf_line *buf, int size)
+{
+ bbuf *newbuf=NULL;
+ bbuf_line *bline=NULL;
+
+ newbuf = bbuf_new(size);
+ if (newbuf == NULL)
+ {
+
+ return -1;
+ }
+
+ bline = malloc(sizeof(bbuf_line));
+ if (bline == NULL)
+ {
+ return -1;
+ }
+
+ memset(bline, 0, sizeof(bbuf_line));
+
+ bline->buf = newbuf;
+
+ buf = bline;
+
+ return 0;
+}
+
+int bbuf_line_pattern(bbuf_line *buf, char *patt, int size)
+{
+ return -1;
+}
+
+int bbuf_line_add(bbuf_line *buf_line, bbuf *new_data)
+{
+
+ return -1;
+}
+
+
+int bbuf_line_get_line(bbuf_line *buf_line, bbuf *line)
+{
+
+ return -1;
+}
+
+
+int bbuf_line_free(bbuf_line *buf)
+{
+
+ return -1;
+}
+
+*/
+
+BufLine::BufLine(int size)
+{
+ buf = new Buf(size);
+ sep=0x0;
+ memset(pattern,0,BUF_PATTER_SIZE);
+}
+
+BufLine::~BufLine()
+{
+ delete buf;
+}
+
+int BufLine::setpattern(char *pattern)
+{
+ return -1;
+}
+
+int BufLine::setseperator(char s)
+{
+ this->sep = s;
+ return 0;
+}
+
+int BufLine::add(char *string, int size)
+{
+ return -1;
+}
+
+int BufLine::add(Buf *newdata)
+{
+ buf->concat(newdata);
+ return 0;
+}
+
+int BufLine::pop_line(char **val, int *size)
+{
+ int idx;
+ if (1 == buf->findc('\n',&idx))
+ {
+ buf->popsubstring(idx,val,size);
+ buf->shiftleft(1);//remove seperator character
+ return 0;
+ }
+ return -1;
+}
+
+int BufLine::print()
+{
+ buf->print();
+ return -1;
+}
+
+/*
+RETURN_IF_PATTERN_FOUND(*detect_pattern)(char *INPUT_BUFFER, int INPUT_SIZE)
+*/
+int BufLine::pop_pattern(int (*detect_pattern)(char *, int, int*), char **val, int *size)
+{
+ int detected=0;
+
+ char *buf;
+ int buf_size = 0;
+ int data_size = 0;
+
+ this->buf->get_ptr(&buf, &buf_size);
+ if ((detected = detect_pattern(buf, buf_size, &data_size)) != 1)
+ {
+ return -1;
+ }
+
+ this->buf->popsubstring(data_size, val, size);
+
+ return 0;
+}
+
+/*
+int bbuf_circ_new(bbuf_circ **circ, int size)
+{
+ bbuf *buf = NULL;
+ bbuf_circ *cbuf = NULL;
+
+ buf = bbuf_new(size);
+ if (buf == NULL)
+ {
+ return -1;
+ }
+
+ cbuf = malloc(sizeof(bbuf_circ));
+ if (cbuf == NULL)
+ {
+ return -1;
+ }
+
+ cbuf->buf = buf;
+ cbuf->head = 0;
+ cbuf->tail = 0;
+
+ *circ = cbuf;
+
+ return 0;
+}
+
+int bbuf_circ_add(bbuf_circ *circ, bbuf *new_data)
+{
+ int i=0;
+ int cnt=0;
+
+ if (circ == NULL)
+ {
+ return -1;
+ }
+
+ if (new_data == NULL)
+ {
+ return -1;
+ }
+
+ if (bbuf_size(new_data) <= 0)
+ {
+ return -1;
+ }
+
+ for (i=0;i<bbuf_size(new_data);i++)
+ {
+ if (0 == bbuf_circ_put(circ, new_data->buf[i]))
+ {
+ cnt++;
+ }
+ }
+
+ return cnt;
+}
+
+int bbuf_circ_get_line(bbuf_circ *circ, bbuf *line)
+{
+
+}
+
+int bbuf_circ_reset(bbuf_circ *circ)
+{
+ if (circ == NULL)
+ {
+ return -1;
+ }
+
+ circ->head = 0;
+ circ->tail = 0;
+
+ return 0;
+}
+
+
+int bbuf_circ_get(bbuf_circ *circ, char *data)
+{
+ if (circ == NULL)
+ {
+ return -1;
+ }
+
+ if (data == NULL)
+ {
+ return -1;
+ }
+
+ if (0 == bbuf_circ_empty(circ))
+ {
+ *data = circ->buf->buf[circ->tail];
+ circ->tail = (circ->tail+1)%bbuf_size(circ->buf);
+ return 0;
+ }
+
+ return -1;
+}
+
+int bbuf_circ_put(bbuf_circ *circ, char data)
+{
+ if (NULL == circ)
+ {
+ return -1;
+ }
+
+ circ->buf->buf[circ->head] = data;
+ circ->head = (circ->head+1)%bbuf_size(circ->buf);
+
+ if (circ->head == circ->tail)
+ {
+ circ->tail = (circ->tail+1)%bbuf_size(circ->buf);
+ }
+
+ return 0;
+}
+
+int bbuf_circ_empty(bbuf_circ *circ)
+{
+ if (circ == NULL)
+ {
+ return -1;
+ }
+
+ return (circ->tail == circ->head);
+}
+
+int bbuf_circ_full(bbuf_circ *circ)
+{
+ //one lost byte
+ return ((circ->head+1)%bbuf_size(circ->buf) == (circ->tail));
+}
+
+int bbuf_circ_free(bbuf_circ *circ)
+{
+ bbuf_free(circ->buf);
+ circ->buf = NULL;
+ free(circ);
+ circ = NULL;
+}
+*/ \ No newline at end of file