void (*notify_write)(struct ustream *s, int bytes);
/*
- * notify_state:
+ * notify_state: (optional)
* called by the ustream implementation to notify that the read
* side of the stream is closed (eof is set) or there was a write
* error (write_error is set).
/* 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, ...);
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 */