aboutsummaryrefslogtreecommitdiff
path: root/src/base/bufio
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/bufio')
-rw-r--r--src/base/bufio/flush.c36
-rw-r--r--src/base/bufio/getc.c45
-rw-r--r--src/base/bufio/getr.c29
-rw-r--r--src/base/bufio/init.c102
-rw-r--r--src/base/bufio/internal.h4
-rw-r--r--src/base/bufio/offset.c24
-rw-r--r--src/base/bufio/open.c27
-rw-r--r--src/base/bufio/openfd.c12
-rw-r--r--src/base/bufio/print.c14
-rw-r--r--src/base/bufio/putc.c19
-rw-r--r--src/base/bufio/read.c54
-rw-r--r--src/base/bufio/readline.c11
-rw-r--r--src/base/bufio/readuntil.c65
-rw-r--r--src/base/bufio/rules.mk18
-rw-r--r--src/base/bufio/seek.c57
-rw-r--r--src/base/bufio/ungetc.c13
-rw-r--r--src/base/bufio/ungetr.c13
-rw-r--r--src/base/bufio/vprint.c34
-rw-r--r--src/base/bufio/write.c40
19 files changed, 0 insertions, 617 deletions
diff --git a/src/base/bufio/flush.c b/src/base/bufio/flush.c
deleted file mode 100644
index 0974766..0000000
--- a/src/base/bufio/flush.c
+++ /dev/null
@@ -1,36 +0,0 @@
-#include "internal.h"
-
-int
-bio·flush(io·Header *io)
-{
- intptr ni, no;
-
- switch(io->state){
- case io·BufWtr:
- if((ni = io->cap + io->olen))
- return 0;
-
- sys·write(io->fd, ni, io->b, &no);
-
- if(no!=ni){
- io->pos += ni;
- io->olen = -io->cap;
- return 0;
- }
-
- io->state = io·BufNil;
- io->olen = 0;
- break;
-
- case io·BufEof:
- io->state = io·BufRdr;
- /* fallthrough */
- case io·BufRdr:
- io->ilen = 0;
- io->g = io->e;
- return 0;
- default:
- ;
- }
- return io·BufEof;
-}
diff --git a/src/base/bufio/getc.c b/src/base/bufio/getc.c
deleted file mode 100644
index 264e01d..0000000
--- a/src/base/bufio/getc.c
+++ /dev/null
@@ -1,45 +0,0 @@
-#include "internal.h"
-
-int
-bio·getc(io·Header *io)
-{
- int i;
- intptr nr;
-
-loop:
- i = io->ilen;
- if(i != 0){
- io->ilen = i+1;
- return io->e[i];
- }
-
- if(io->state != io·BufRdr){
- if(io->state == io·BufEnd)
- io->state = io·BufRdr;
- return io·BufEof;
- }
-
- /*
- * get next buffer, try to keep io·BufUngets bytes
- * pre-catenated from the previous read to allow for ungets
- */
- mem·move(io->b-io·BufUngets, io->e-io·BufUngets, io·BufUngets);
- if(sys·read(io->fd, io->cap, io->b, &nr)){
- io->state = io·BufNil;
- return io·BufEof;
- }
- if(nr == 0){
- io->state = io·BufEnd;
- return io·BufEof;
- }
-
- if(nr < io->cap){
- mem·move(io->e-i-io·BufUngets, io->b-io·BufUngets, i+io·BufUngets);
- io->g = io->e-i;
- }
-
- io->ilen = -i;
- io->pos += +i;
-
- goto loop;
-}
diff --git a/src/base/bufio/getr.c b/src/base/bufio/getr.c
deleted file mode 100644
index 579a387..0000000
--- a/src/base/bufio/getr.c
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "internal.h"
-
-rune
-bio·getr(io·Header *io)
-{
- int c, i;
- rune r;
- char buf[UTFmax];
-
- c = bio·getc(io);
- if(utf8·onebyte(c)){
- io->runesz = 1;
- return c;
- }
- buf[0] = c;
-
- for(i=1;;){
- if((c = bio·getc(io))<0)
- return c;
-
- buf[i++] = c;
- if(utf8·fullrune(buf, i)){
- io->runesz = utf8·decode(buf, &r);
- while(i-- > io->runesz)
- bio·ungetc(io);
- return r;
- }
- }
-}
diff --git a/src/base/bufio/init.c b/src/base/bufio/init.c
deleted file mode 100644
index b6814e1..0000000
--- a/src/base/bufio/init.c
+++ /dev/null
@@ -1,102 +0,0 @@
-#include "internal.h"
-
-#define MAXHEADERS 20
-static io·Header *tracked[MAXHEADERS];
-static int doexit;
-
-static void
-untrackall(void *arg)
-{
- int i;
- io·Header *it;
-
- for(i=0; i < MAXHEADERS; i++){
- it = tracked[i];
- if(it){
- tracked[i] = nil;
- bio·flush(it);
- }
- }
-}
-
-static void
-untrack(io·Header *io)
-{
- int i;
-
- for(i=0; i<arrlen(tracked); i++){
- if(tracked[i] == io)
- tracked[i] = nil;
- }
-}
-
-static void
-track(io·Header *io)
-{
- int i;
-
- untrack(io);
- for(i=0; i<arrlen(tracked); i++){
- if(!tracked[i]){
- tracked[i] = io;
- break;
- }
- }
-
- if(!doexit){
- doexit = 1;
- rt·atexit(untrackall, nil);
- }
-}
-
-int
-bio·initcap(io·Header *io, int fd, int mode, int cap, uchar *buf)
-{
- buf += io·BufUngets;
- cap += io·BufUngets;
-
- switch(mode & ~(sys·OCloseExec|sys·OTrunc)){
- default:
- fmt·fprint(2, "initcap: unknown mode %d\n" , mode);
- return io·BufErr;
- case sys·ORead:
- io->state = io·BufRdr;
- io->olen = 0;
- break;
- case sys·OWrite:
- track(io);
- io->state = io·BufWtr;
- io->olen = -cap;
- break;
- }
-
- io->b = buf;
- io->e = buf+cap;
- io->g = io->e;
- io->fd = fd;
- io->cap = cap;
- io->pos = io->runesz = io->flag = io->ilen = io->nread = 0;
- return 0;
-}
-
-int
-bio·init(io·Buffer *io, int fd, int mode)
-{
- return bio·initcap(header(io), fd, mode, io·BufLen + io·BufUngets, io->bytes);
-}
-
-int
-bio·close(io·Header *io)
-{
- int err;
-
- untrack(io);
-
- err = bio·flush(io);
- if(io->flag == io·BufMagic){
- io->flag = 0;
- if((err=sys·close(io->fd)))
- return err;
- }
- return 0;
-}
diff --git a/src/base/bufio/internal.h b/src/base/bufio/internal.h
deleted file mode 100644
index a59e787..0000000
--- a/src/base/bufio/internal.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <u.h>
-#include <base.h>
-
-#define header(io) ((io·Header*)(io))
diff --git a/src/base/bufio/offset.c b/src/base/bufio/offset.c
deleted file mode 100644
index 15579c4..0000000
--- a/src/base/bufio/offset.c
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "internal.h"
-
-intptr
-bio·offset(io·Header *io)
-{
- intptr n;
- switch(io->state){
- default:
- fmt·fprint(2, "offset: unknown state %d\n", io->state);
- n = io·BufEof;
- break;
-
- case io·BufEnd:
- case io·BufRdr:
- n = io->pos + io->ilen;
- break;
-
- case io·BufWtr:
- n = io->pos + (io->cap + io->olen);
- break;
- }
-
- return n;
-}
diff --git a/src/base/bufio/open.c b/src/base/bufio/open.c
deleted file mode 100644
index 29ccae1..0000000
--- a/src/base/bufio/open.c
+++ /dev/null
@@ -1,27 +0,0 @@
-#include "internal.h"
-
-int
-bio·open(char *path, int flag, io·Buffer *io)
-{
- int fd;
- switch(flag & ~(sys·OCloseExec|sys·OTrunc)){
- default:
- fmt·fprint(2, "open: unknown flag %d\n", flag);
- return 1;
-
- case sys·ORead:
- if(sys·open(path, flag, 0, &fd))
- return 1;
- break;
-
- case sys·OWrite:
- if(sys·open(path, flag, 0666, &fd))
- return 1;
- break;
- }
- if(bio·openfd(fd, flag, io)){
- sys·close(fd);
- return 1;
- }
- return 0;
-}
diff --git a/src/base/bufio/openfd.c b/src/base/bufio/openfd.c
deleted file mode 100644
index 66ca967..0000000
--- a/src/base/bufio/openfd.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "internal.h"
-
-int
-bio·openfd(int fd, int flag, io·Buffer *io)
-{
- int err;
- if((err=bio·init(io, fd, flag)))
- return err;
-
- io->flag = io·BufMagic;
- return 0;
-}
diff --git a/src/base/bufio/print.c b/src/base/bufio/print.c
deleted file mode 100644
index 04a85f9..0000000
--- a/src/base/bufio/print.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "internal.h"
-
-int
-bio·print(io·Header *io, char *fmt, ...)
-{
- int n;
- va_list args;
-
- va_start(args, fmt);
- n = bio·vprint(io, fmt, args);
- va_end(args);
-
- return n;
-}
diff --git a/src/base/bufio/putc.c b/src/base/bufio/putc.c
deleted file mode 100644
index e91a1f1..0000000
--- a/src/base/bufio/putc.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "internal.h"
-
-int
-bio·putc(io·Header *io, int c)
-{
- intptr i;
-
- for(;;){
- i = io->olen;
- if(i){
- io->e[i++] = c;
- io->olen = i;
- return 0;
- }
- if(bio·flush(io) == io·BufEof)
- break;
- }
- return io·BufEof;
-}
diff --git a/src/base/bufio/read.c b/src/base/bufio/read.c
deleted file mode 100644
index ad0275c..0000000
--- a/src/base/bufio/read.c
+++ /dev/null
@@ -1,54 +0,0 @@
-#include "internal.h"
-
-intptr
-bio·read(io·Header *io, intptr len, void *buf)
-{
- uchar *b;
- intptr c0, c, nr, n, ic;
-
- b = buf;
- c = len;
- ic = io->ilen; // how many bytes we've read and not flushed
-
- while(c > 0){
- n = -ic;
- if(n > c)
- n = c;
- if(n == 0){
- /* only continue if we are a file reader */
- if(io->state != io·BufRdr)
- break;
-
- /* get more bytes */
- if(sys·read(io->fd, io->cap, io->b, &nr)){
- io->state = io·BufNil;
- break;
- }
-
- if(nr == 0){
- io->state = io·BufEnd;
- break;
- }
-
- /* shift bytes within buffer so they end at terminal */
- io->g = io->b;
- io->pos += nr;
- if(nr < io->cap){
- io->g = io->e-nr;
- mem·move(io->g, io->b, nr);
- }
- ic -= nr;
- continue;
- }
- /* move our read bytes into the caller's buffer */
- mem·move(b, io->e+ic, n);
- c -= n;
- ic += n;
- b += n;
- }
- io->ilen = ic;
- if(c == len && io->state == io·BufNil)
- return -1;
-
- return len-c;
-}
diff --git a/src/base/bufio/readline.c b/src/base/bufio/readline.c
deleted file mode 100644
index 0a50098..0000000
--- a/src/base/bufio/readline.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "internal.h"
-
-void *
-bio·readline(io·Header *io, int null)
-{
- char *start = bio·readuntil(io, '\n');
- if(null && start)
- start[io->nread-1] = 0;
-
- return start;
-}
diff --git a/src/base/bufio/readuntil.c b/src/base/bufio/readuntil.c
deleted file mode 100644
index 1a0faaf..0000000
--- a/src/base/bufio/readuntil.c
+++ /dev/null
@@ -1,65 +0,0 @@
-#include "internal.h"
-
-void *
-bio·readuntil(io·Header *io, int delim)
-{
- char *b, *e;
- intptr i, j;
-
- i = -io->ilen;
- if(i==0){
- if(io->state != io·BufRdr){
- if(io->state == io·BufEnd)
- io->state = io·BufRdr;
- io->nread = 0;
- io->g = io->e;
- return nil;
- }
- }
-
- /* best case, we find it in the remaining bytes */
- b = (char*)io->e - i;
- if((e = mem·findc(b, i, delim)) != nil){
- j = (e - b)+1;
- io->nread = j;
- io->ilen += j;
- return b;
- }
- /* ok no luck, shift over the data and get more */
- if(i < io->cap)
- mem·move(io->b, b, i);
- io->g = io->b;
-
- /* write to the buffer while we search for delim */
- b = (char *)io->b + i;
- while(i < io->cap){
- if(sys·read(io->fd, io->cap-i, b, &j) || j == 0){
- mem·move(io->e-i, io->b, i);
- io->nread = +i;
- io->ilen = -i;
- io->g = io->e - i;
- return 0;
- }
- io->pos += j;
- i += j;
- e = mem·findc(b, j, delim);
- if(e!=nil){
- /* finally have a hit. reset the world */
- b = (char*)io->e - i;
- if(i < io->cap){
- mem·move(b, io->b, i);
- io->g = (uchar *)b;
- }
- j = (e - (char*)io->b) + 1;
- io->nread = j;
- io->ilen = j - i;
- return b;
- }
- b += j;
- }
-
- io->nread = +io->cap;
- io->ilen = -io->cap;
- io->g = io->b;
- return nil;
-}
diff --git a/src/base/bufio/rules.mk b/src/base/bufio/rules.mk
deleted file mode 100644
index f367b8e..0000000
--- a/src/base/bufio/rules.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-SRCS_$(d)+=\
- $(d)/bufio/flush.c\
- $(d)/bufio/getc.c\
- $(d)/bufio/getr.c\
- $(d)/bufio/init.c\
- $(d)/bufio/offset.c\
- $(d)/bufio/open.c\
- $(d)/bufio/openfd.c\
- $(d)/bufio/print.c\
- $(d)/bufio/putc.c\
- $(d)/bufio/read.c\
- $(d)/bufio/readline.c\
- $(d)/bufio/readuntil.c\
- $(d)/bufio/seek.c\
- $(d)/bufio/ungetc.c\
- $(d)/bufio/ungetr.c\
- $(d)/bufio/vprint.c\
- $(d)/bufio/write.c
diff --git a/src/base/bufio/seek.c b/src/base/bufio/seek.c
deleted file mode 100644
index 5d25173..0000000
--- a/src/base/bufio/seek.c
+++ /dev/null
@@ -1,57 +0,0 @@
-#include "internal.h"
-
-int
-bio·seek(io·Header *io, intptr offset, int whence, intptr *pos)
-{
- intptr n,d,cap;
-
- switch(io->state){
- default:
- fmt·fprint(2, "seek: unknown state %d\n", io->state);
- return io·BufEof;
- case io·BufEnd:
- io->state = io·BufRdr;
- io->ilen = 0;
- io->g = io->e;
- /* fallthrough */
- case io·BufRdr:
- n = offset;
- if(whence == sys·SeekCur){
- n += bio·offset(io);
- whence = sys·SeekSet;
- }
-
- /* can we seek inside our buffer */
- if(whence == sys·SeekSet){
- d = n - bio·offset(io);
- cap = io->e - io->g;
- if(-cap <= d && d <= cap){
- io->ilen += d;
- if(d >= 0){
- if(io->ilen <= 0){
- *pos = n;
- return 0;
- }
- }else{
- if(io->e - io->g >= -io->ilen){
- *pos = n;
- return 0;
- }
- }
- }
- }
-
- /* nope, call the kernel to do it for us */
- sys·seek(io->fd, offset, whence, &n);
- io->ilen = 0;
- io->g = io->e;
- break;
-
- case io·BufWtr:
- bio·flush(io);
- sys·seek(io->fd, offset, whence, &n);
- break;
- }
- io->pos = *pos = n;
- return 0;
-}
diff --git a/src/base/bufio/ungetc.c b/src/base/bufio/ungetc.c
deleted file mode 100644
index 70abbab..0000000
--- a/src/base/bufio/ungetc.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "internal.h"
-
-int
-bio·ungetc(io·Header *io)
-{
- if(io->state == io·BufEnd)
- io->state = io·BufRdr;
- if(io->state != io·BufRdr)
- return io·BufEof;
-
- io->ilen--;
- return 0;
-}
diff --git a/src/base/bufio/ungetr.c b/src/base/bufio/ungetr.c
deleted file mode 100644
index 8abdc39..0000000
--- a/src/base/bufio/ungetr.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "internal.h"
-
-rune
-bio·ungetr(io·Header *io)
-{
- if(io->state == io·BufEnd)
- io->state = io·BufRdr;
- if(io->state != io·BufRdr)
- return io·BufEof;
- io->ilen -= io->runesz;
- io->runesz = 0;
- return 0;
-}
diff --git a/src/base/bufio/vprint.c b/src/base/bufio/vprint.c
deleted file mode 100644
index 70be6bf..0000000
--- a/src/base/bufio/vprint.c
+++ /dev/null
@@ -1,34 +0,0 @@
-#include "internal.h"
-
-static int
-flush(fmt·State *fmt)
-{
- io·Header *io = fmt->file;
- io->olen = fmt->buffer.cur - fmt->buffer.end;
- if(bio·flush(io))
- return 0;
-
- fmt->buffer.end = (char*)io->e;
- fmt->buffer.cur = fmt->buffer.beg = fmt->buffer.end + io->olen;
- return 1;
-}
-
-int
-bio·vprint(io·Header *io, char *fmt, va_list args)
-{
- int n;
- fmt·State f;
-
- f.buffer.end = (char*)io->e;
- f.buffer.beg = f.buffer.cur = (char*)(io->e + io->olen);
- f.n = 0;
- f.file = io;
- f.flush = flush;
-
- va_copy(f.args,args);
- n = fmt·do(&f, fmt);
- va_end(f.args);
-
- io->olen = f.buffer.cur - f.buffer.beg;
- return n;
-}
diff --git a/src/base/bufio/write.c b/src/base/bufio/write.c
deleted file mode 100644
index 8b64055..0000000
--- a/src/base/bufio/write.c
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "internal.h"
-
-intptr
-bio·write(io·Header *io, intptr len, void *buf)
-{
- char *b;
- intptr c, o, nw, n;
-
- b = buf;
- c = len;
- o = io->olen;
-
- while(c > 0){
- n = -o;
- if(n > c)
- n = c;
- if(n == 0){
- if(io->state != io·BufWtr)
- return io·BufEof;
- switch(sys·write(io->fd, io->cap, io->b, &nw)){
- case 0:
- if(nw != io->cap) goto error;
- io->pos += nw;
- o = -io->cap;
- continue;
- case sys·ErrorInterrupt:
- io->state = io·BufNil;
- /* fallthrough */
- default: error:
- return io·BufEof;
- }
- }
- mem·move(io->e+o, b, n);
- o += n;
- c -= n;
- b += n;
- }
- io->olen = o;
- return len-c;
-}