int buffer_get(buffer *s,char *buf,unsigned int len) { int r; if (s->p > 0) return getthis(s,buf,len); if (s->n <= len) return oneread(s->op,s->fd,buf,len); r = buffer_feed(s); if (r <= 0) return r; return getthis(s,buf,len); }
int GCDBuffer::get(char *buf,unsigned int len) { int r; if (p > 0) return getthis(buf,len); if (n <= len) return oneread(op,fd,buf,len); r = GCDBuffer::feed(); if (r <= 0) return r; return getthis(buf,len); }
int buffer_feed(buffer *s) { int r; if (s->p) return s->p; r = oneread(s->op,s->fd,s->x,s->n); if (r <= 0) return r; s->p = r; s->n -= r; if (s->n > 0) byte_copyr(s->x + s->n,r,s->x); return r; }