aboutsummaryrefslogtreecommitdiff
path: root/common/dbuf_def.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/dbuf_def.h')
-rw-r--r--common/dbuf_def.h96
1 files changed, 96 insertions, 0 deletions
diff --git a/common/dbuf_def.h b/common/dbuf_def.h
new file mode 100644
index 0000000..1295d2d
--- /dev/null
+++ b/common/dbuf_def.h
@@ -0,0 +1,96 @@
+/************************************************************************
+ * IRC - Internet Relay Chat, common/dbuf_def.h
+ * Copyright (C) 1990 Markku Savela
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 1, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#define DBUF_TAIL
+
+/*
+** dbuf is a collection of functions which can be used to
+** maintain a dynamic buffering of a byte stream.
+** Functions allocate and release memory dynamically as
+** required [Actually, there is nothing that prevents
+** this package maintaining the buffer on disk, either]
+*/
+
+/*
+** These structure definitions are only here to be used
+** as a whole, *DO NOT EVER REFER TO THESE FIELDS INSIDE
+** THE STRUCTURES*! It must be possible to change the internal
+** implementation of this package without changing the
+** interface.
+*/
+#if !defined(_SEQUENT_)
+typedef struct dbuf
+ {
+ u_int length; /* Current number of bytes stored */
+ u_int offset; /* Offset to the first byte */
+ struct dbufbuf *head; /* First data buffer, if length > 0 */
+#ifdef DBUF_TAIL
+ /* added by mnystrom@mit.edu: */
+ struct dbufbuf *tail; /* last data buffer, if length > 0 */
+#endif
+ } dbuf;
+#else
+typedef struct dbuf
+ {
+ uint length; /* Current number of bytes stored */
+ uint offset; /* Offset to the first byte */
+ struct dbufbuf *head; /* First data buffer, if length > 0 */
+#ifdef DBUF_TAIL
+ /* added by mnystrom@mit.edu: */
+ struct dbufbuf *tail; /* last data buffer, if length > 0 */
+#endif
+ } dbuf;
+#endif
+/*
+** And this 'dbufbuf' should never be referenced outside the
+** implementation of 'dbuf'--would be "hidden" if C had such
+** keyword...
+** If it was possible, this would compile to be exactly 1 memory
+** page in size. 2048 bytes seems to be the most common size, so
+** as long as a pointer is 4 bytes, we get 2032 bytes for buffer
+** data after we take away a bit for malloc to play with. -avalon
+*/
+typedef struct dbufbuf
+ {
+ struct dbufbuf *next; /* Next data buffer, NULL if this is last */
+ char data[2032]; /* Actual data stored here */
+ } dbufbuf;
+
+/*
+** DBufLength
+** Return the current number of bytes stored into the buffer.
+** (One should use this instead of referencing the internal
+** length field explicitly...)
+*/
+#define DBufLength(dyn) ((dyn)->length)
+
+/*
+** DBufClear
+** Scratch the current content of the buffer. Release all
+** allocated buffers and make it empty.
+*/
+#define DBufClear(dyn) dbuf_delete((dyn),DBufLength(dyn))
+
+/* This is a dangerous define because a broken compiler will set DBUFSIZ
+** to 4, which will work but will be very inefficient. However, there
+** are other places where the code breaks badly if this is screwed
+** up, so... -- Wumpus
+*/
+
+#define DBUFSIZ sizeof(((dbufbuf *)0)->data)