aboutsummaryrefslogtreecommitdiff
path: root/src/base/bufio/readuntil.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/bufio/readuntil.c')
-rw-r--r--src/base/bufio/readuntil.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/base/bufio/readuntil.c b/src/base/bufio/readuntil.c
index 8084cca..1a0faaf 100644
--- a/src/base/bufio/readuntil.c
+++ b/src/base/bufio/readuntil.c
@@ -11,7 +11,7 @@ bio·readuntil(io·Header *io, int delim)
if(io->state != io·BufRdr){
if(io->state == io·BufEnd)
io->state = io·BufRdr;
- io->line = 0;
+ io->nread = 0;
io->g = io->e;
return nil;
}
@@ -21,7 +21,7 @@ bio·readuntil(io·Header *io, int delim)
b = (char*)io->e - i;
if((e = mem·findc(b, i, delim)) != nil){
j = (e - b)+1;
- io->line = j;
+ io->nread = j;
io->ilen += j;
return b;
}
@@ -29,12 +29,13 @@ bio·readuntil(io·Header *io, int delim)
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)){
+ if(sys·read(io->fd, io->cap-i, b, &j) || j == 0){
mem·move(io->e-i, io->b, i);
- io->line = +i;
+ io->nread = +i;
io->ilen = -i;
io->g = io->e - i;
return 0;
@@ -50,15 +51,15 @@ bio·readuntil(io·Header *io, int delim)
io->g = (uchar *)b;
}
j = (e - (char*)io->b) + 1;
- io->line = j;
+ io->nread = j;
io->ilen = j - i;
return b;
}
b += j;
}
- io->line = +io->cap;
+ io->nread = +io->cap;
io->ilen = -io->cap;
io->g = io->b;
- return 0;
+ return nil;
}