aboutsummaryrefslogtreecommitdiff
path: root/src/base/bufio/seek.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/bufio/seek.c')
-rw-r--r--src/base/bufio/seek.c57
1 files changed, 0 insertions, 57 deletions
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;
-}