/* 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, ...);
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;
}
/*** --- functions only used by ustream implementations --- ***/