5 static int oneread(int (*op
)(),int fd
,char *buf
,unsigned int len
)
11 if (r
== -1) if (errno
== error_intr
) continue;
16 static int getthis(buffer
*s
,char *buf
,unsigned int len
)
18 if (len
> s
->p
) len
= s
->p
;
20 byte_copy(buf
,len
,s
->x
+ s
->n
);
25 int buffer_feed(buffer
*s
)
29 if (s
->p
) return s
->p
;
30 r
= oneread(s
->op
,s
->fd
,s
->x
,s
->n
);
34 if (s
->n
> 0) byte_copyr(s
->x
+ s
->n
,r
,s
->x
);
38 int buffer_bget(buffer
*s
,char *buf
,unsigned int len
)
42 if (s
->p
> 0) return getthis(s
,buf
,len
);
43 if (s
->n
<= len
) return oneread(s
->op
,s
->fd
,buf
,s
->n
);
44 r
= buffer_feed(s
); if (r
<= 0) return r
;
45 return getthis(s
,buf
,len
);
48 int buffer_get(buffer
*s
,char *buf
,unsigned int len
)
52 if (s
->p
> 0) return getthis(s
,buf
,len
);
53 if (s
->n
<= len
) return oneread(s
->op
,s
->fd
,buf
,len
);
54 r
= buffer_feed(s
); if (r
<= 0) return r
;
55 return getthis(s
,buf
,len
);
58 char *buffer_peek(buffer
*s
)
63 void buffer_seek(buffer
*s
,unsigned int len
)