aboutsummaryrefslogtreecommitdiff
path: root/src/bufio/buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bufio/buffer.c')
-rw-r--r--src/bufio/buffer.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/bufio/buffer.c b/src/bufio/buffer.c
new file mode 100644
index 0000000..8963652
--- /dev/null
+++ b/src/bufio/buffer.c
@@ -0,0 +1,24 @@
+#include "impl.h"
+
+// NewBuffer allocates a bytes buffer with size 'size'.
+// This is unallocated usage.
+// Returns the fat pointer by value.
+
+void*
+newbuffer(uintptr off, uintptr size)
+{
+ if (size == 0 || size > BUF·max) size = BUF·size;
+
+ void *mem = malloc(off + sizeof(Buffer) + size);
+ Buffer *buf = mem + off;
+
+ buf->eof = 0;
+ buf->off = 0;
+ buf->base = buf->b + BUF·ungets;
+ buf->end = buf->b + size;
+ buf->size = buf->end - buf->base;
+
+ memset(buf->b, 0, size);
+
+ return mem;
+}