blobmsg_json: simplify add_separator and fix thread-safety
[project/libubox.git] / ustream.h
index 24a18e3..53e0828 100644 (file)
--- 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;
 }