[ds6-devel] nc6/src circ_buf.h,1.11,1.12 circ_buf.c,1.12,1.13
chris@deepspace6.net
chris@deepspace6.net
Sat Dec 28 18:54:43 2002
Update of /cvs/nc6/src
Modified Files:
circ_buf.h circ_buf.c
Log Message:
Added a cb_resize function to dynamically change the size of the circular buffer
Index: circ_buf.h
===================================================================
RCS file: /cvs/nc6/src/circ_buf.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- circ_buf.h 28 Dec 2002 18:41:48 -0000 1.11
+++ circ_buf.h 28 Dec 2002 18:54:41 -0000 1.12
@@ -41,11 +41,13 @@
void cb_init(circ_buf *cb, size_t size);
void cb_destroy(circ_buf *cb);
+void cb_resize(circ_buf *cb, size_t size);
+
#define cb_size(CB) ((CB)->buf_size)
#define cb_used(CB) ((CB)->data_size)
#define cb_space(CB) ((CB)->buf_size - (CB)->data_size)
-#define cb_is_empty(CB) (cb_size(CB) == 0)
+#define cb_is_empty(CB) (cb_used(CB) == 0)
#define cb_is_full(CB) (cb_space(CB) == 0)
ssize_t cb_read(circ_buf *cb, int fd, size_t nbytes);
Index: circ_buf.c
===================================================================
RCS file: /cvs/nc6/src/circ_buf.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- circ_buf.c 28 Dec 2002 18:41:48 -0000 1.12
+++ circ_buf.c 28 Dec 2002 18:54:41 -0000 1.13
@@ -76,6 +76,30 @@
+void cb_resize(circ_buf *cb, size_t size)
+{
+ uint8_t *new_buf;
+
+ cb_assert(cb);
+ assert(size > 0);
+
+ /* create a new buffer and copy the existing data into it */
+ new_buf = (uint8_t *)xmalloc(size);
+ cb_extract(cb, new_buf, size);
+
+ /* replace buffer */
+ free(cb->buf);
+ cb->buf = new_buf;
+
+ /* adjust pointers and sizes */
+ cb->ptr = cb->buf;
+ cb->buf_size = size;
+ if (cb->data_size > size)
+ cb->data_size = size;
+}
+
+
+
ssize_t cb_read(circ_buf *cb, int fd, size_t nbytes)
{
ssize_t rr;
More information about the ds6-devel
mailing list