These two patches are for server side partial write.

When server writes data into non-blocking IO, we first get the
read pointer of write_buf and write data as much as we can. Then
we advance the read_ptr according to the real bytes written.
---
 gatchat/ringbuffer.c |    8 ++++++++
 gatchat/ringbuffer.h |    7 +++++++
 2 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/gatchat/ringbuffer.c b/gatchat/ringbuffer.c
index 42d5b68..e17c1fa 100644
--- a/gatchat/ringbuffer.c
+++ b/gatchat/ringbuffer.c
@@ -130,6 +130,14 @@ int ring_buffer_read(struct ring_buffer *buf, void *data, 
unsigned int len)
        return len;
 }
 
+int ring_buffer_read_advance(struct ring_buffer *buf, unsigned int len)
+{
+       len = MIN(len, buf->in - buf->out);
+       buf->out += len;
+
+       return len;
+}
+
 int ring_buffer_drain(struct ring_buffer *buf, unsigned int len)
 {
        len = MIN(len, buf->in - buf->out);
diff --git a/gatchat/ringbuffer.h b/gatchat/ringbuffer.h
index 826f9aa..aa4f570 100644
--- a/gatchat/ringbuffer.h
+++ b/gatchat/ringbuffer.h
@@ -93,6 +93,13 @@ int ring_buffer_read(struct ring_buffer *buf, void *data,
                        unsigned int len);
 
 /*!
+ * Advances the read counter by len, this is meant to be used with
+ * the ring_buffer_read_ptr function.  Returns the number of bytes
+ * actually advanced (the capacity of the buffer)
+ */
+int ring_buffer_read_advance(struct ring_buffer *buf, unsigned int len);
+
+/*!
  * Returns the read pointer with read offset specified by offset.  No bounds
  * checking is performed.  Be careful not to read past the end of the buffer.
  * Use the ring_buffer_len_no_wrap function, and ring_buffer_drain.
-- 
1.6.6.1

_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to