aboutsummaryrefslogtreecommitdiff
path: root/main/sockbuf.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/sockbuf.c')
-rw-r--r--main/sockbuf.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/main/sockbuf.c b/main/sockbuf.c
new file mode 100644
index 0000000..0fede63
--- /dev/null
+++ b/main/sockbuf.c
@@ -0,0 +1,43 @@
+#include "sockbuf.h"
+
+#include <unistd.h>
+#include <string.h>
+
+void sockbuf_write(sockbuf_t* sockbuf, const char* value)
+{
+ write(sockbuf->socket, value, strlen(value));
+}
+
+sockbuf_t* init_sockbuf(sockbuf_t* sockbuf, int socket)
+{
+ memset(sockbuf, 0, sizeof(sockbuf_t));
+ sockbuf->socket = socket;
+
+ return sockbuf;
+}
+
+int peek_char(sockbuf_t* sockbuf)
+{
+ if (sockbuf->next == sockbuf->last) {
+ sockbuf->next = 0;
+ int size = read(sockbuf->socket, sockbuf->buf, sizeof(sockbuf->buf));
+ sockbuf->last = (uint8_t) size;
+
+ if (size <= 0) {
+ return size - 1;
+ }
+ }
+
+ return sockbuf->buf[sockbuf->next];
+}
+
+int get_char(sockbuf_t* sockbuf)
+{
+ int ret = peek_char(sockbuf);
+
+ if (ret >= 0) {
+ sockbuf->next ++;
+ }
+
+ return ret;
+}