X-Git-Url: http://git.archive.openwrt.org/?p=project%2Flibubox.git;a=blobdiff_plain;f=ustream.h;h=53e08280bf522118f6ff53447aa62e71aeb1b16e;hp=24a18e3c70fd40113354b430dfc9c52747b2ff6f;hb=a8e70c6d361967a23977417fb7d6cf56234f8b81;hpb=e72b65c89936aafe16c28255ce326aac77f876a7 diff --git a/ustream.h b/ustream.h index 24a18e3..53e0828 100644 --- a/ustream.h +++ b/ustream.h @@ -143,6 +143,11 @@ void ustream_free(struct ustream *s); /* ustream_consume: remove data from the head of the read buffer */ void ustream_consume(struct ustream *s, int len); +/* + * ustream_read: read and consume data in read buffer into caller-specified + * area. Return length of data read. + */ +int ustream_read(struct ustream *s, char *buf, int buflen); /* ustream_write: add data to the write buffer */ int ustream_write(struct ustream *s, const char *buf, int len, bool more); int ustream_printf(struct ustream *s, const char *format, ...); @@ -171,7 +176,8 @@ static inline int ustream_pending_data(struct ustream *s, bool write) static inline bool ustream_read_buf_full(struct ustream *s) { - return ustream_pending_data(s, false) == s->r.buffer_len && + struct ustream_buf *buf = s->r.data_tail; + return buf && buf->data == buf->head && buf->tail == buf->end && s->r.buffers == s->r.max_buffers; }