aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorNicholas <nbnoll@eml.cc>2021-11-20 20:12:21 -0800
committerNicholas <nbnoll@eml.cc>2021-11-20 20:12:21 -0800
commit138fb272fae79587de3469493b55e4d18eadc722 (patch)
tree447d2af80b8c2ea080253e76d33e128c9b27d3f6 /include
parentc9a32c1a43d2bdded07eaa45732c3a6e195a5442 (diff)
Feat: added buffered io from plan9
As we no longer have the FILE type, we need to buffer our reading and writing so that we don't have to make so many syscalls. The API is nice so that we can buffer other readers. We will update it so that it eats io·Readers/io·Writers.
Diffstat (limited to 'include')
-rw-r--r--include/base/io.h37
-rw-r--r--include/base/mem.h8
-rw-r--r--include/base/utf.h2
3 files changed, 35 insertions, 12 deletions
diff --git a/include/base/io.h b/include/base/io.h
index 5d31282..22606ad 100644
--- a/include/base/io.h
+++ b/include/base/io.h
@@ -113,12 +113,12 @@ enum
struct io·Header
{
int state, fd, flag;
- struct{
- int in; /* negative number of bytes at end */
- int out; /* number of bytes at start */
- int ln; /* number of bytes after last readline */
- } off;
- intptr pos, cap; /* position in file, capacity of buffer */
+ int ilen; /* negative number of bytes at end of buffer */
+ int olen; /* number of bytes at start of buffer */
+ int line; /* number of bytes after last readline */
+ int runesz; /* number of bytes of last getrune */
+ int cap; /* size of buffer */
+ intptr pos; /* position in file */
uchar *b,*g,*e; /* start, good bytes, end of byte pointers */
};
@@ -128,8 +128,29 @@ struct io·Buffer
uchar bytes[io·BufLen+io·BufUngets];
};
-int bio·init(io·Buffer *io, int fd, int mode);
-int bio·initcap(io·Header *io, int fd, int mode, int cap, uchar *buf);
+int bio·open(char *path, int flag, io·Buffer *io);
+int bio·openfd(int fd, int flag, io·Buffer *io);
+int bio·close(io·Header *io);
+
+int bio·init(io·Buffer *io, int fd, int mode);
+int bio·initcap(io·Header *io, int fd, int mode, int cap, uchar *buf);
+
+int bio·flush(io·Header *io);
+intptr bio·read(io·Header *io, intptr len, void *buf);
+void *bio·readuntil(io·Header *io, int delim);
+intptr bio·write(io·Header *io, intptr len, void *buf);
+
+int bio·getc(io·Header *io);
+rune bio·getr(io·Header *io);
+
+int bio·ungetc(io·Header *io);
+rune bio·ungetr(io·Header *io);
+
+int bio·seek(io·Header *io, intptr offset, int whence, intptr *pos);
+intptr bio·offset(io·Header *io);
+
+int bio·print(io·Header *io, char *fmt, ...);
+int bio·vprint(io·Header *io, char *fmt, va_list args);
/* basic os helpers */
/* XXX: find a better location for this */
diff --git a/include/base/mem.h b/include/base/mem.h
index 3f1b6e1..6f14c8e 100644
--- a/include/base/mem.h
+++ b/include/base/mem.h
@@ -57,7 +57,9 @@ void mem·freearena(mem·Arena *A);
extern mem·Allocator mem·ArenaAllocator;
-/* generalized memxxx functions */
-void memset64(void *dst, uint64 val, uintptr size);
-
+/* mem functions */
+int mem·move(void *dst, void *src, uintptr size);
+void *mem·findc(void *dst, uintptr len, int c);
+int mem·set(void *dst, int val, uintptr size);
+int mem·set64(void *dst, uint64 val, uintptr size);
diff --git a/include/base/utf.h b/include/base/utf.h
index 846296c..0419d1a 100644
--- a/include/base/utf.h
+++ b/include/base/utf.h
@@ -23,7 +23,7 @@ int utf8·decodeprev(char *s, rune *r); // decode 1 rune from char stream, r
char *utf8·find(char *s, rune); // find rune in char stream
char *utf8·findlast(char* s, rune); // find last rune in char stream
-int utf8·canfit(char *, int); // XXX: odd function...
+int utf8·fullrune(char *, int); // XXX: odd function...
int utf8·isalpha(rune r);
int utf8·isdigit(rune r);