[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