int refill(io·Buffer *buf) { int n; if(buf->state & bufio·end) return bufio·err; memcpy(buf->buf, buf->pos - bufio·ungets, bufio·ungets); n = buf->rdr.read(buf->h, 1, buf->size, buf->beg); if(n < 0) return bufio·err; if(n == 0){ buf->state |= bufio·end; return 0; } buf->pos = buf->beg; buf->end = buf->pos + n; // TEST: put a physical EOF byte at the end // this would allow for an unget operation if(n < buf->size) *buf->end++ = EOF; return n; }