blobmsg: drop old comment about json formatting functions
[oweals/libubox.git] / ustream.h
index 2df429c0a165a341ca83ec557c3e6d760600fe94..9a306180bc20f7ac87ee95b426fddbbba7f05055 100644 (file)
--- a/ustream.h
+++ b/ustream.h
@@ -143,10 +143,17 @@ 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, ...);
-int ustream_vprintf(struct ustream *s, const char *format, va_list arg);
+int ustream_printf(struct ustream *s, const char *format, ...)
+       __attribute__ ((format (printf, 2, 3)));
+int ustream_vprintf(struct ustream *s, const char *format, va_list arg)
+       __attribute__ ((format (printf, 2, 0)));
 
 /* ustream_get_read_buf: get a pointer to the next read buffer data */
 char *ustream_get_read_buf(struct ustream *s, int *buflen);
@@ -163,6 +170,19 @@ static inline bool ustream_read_blocked(struct ustream *s)
        return !!(s->read_blocked & READ_BLOCKED_USER);
 }
 
+static inline int ustream_pending_data(struct ustream *s, bool write)
+{
+       struct ustream_buf_list *b = write ? &s->w : &s->r;
+       return b->data_bytes;
+}
+
+static inline bool ustream_read_buf_full(struct ustream *s)
+{
+       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 --- ***/
 
 /* ustream_init_defaults: fill default callbacks and options */