aboutsummaryrefslogtreecommitdiff
path: root/gnu/libexec/uucp/libuuconf/alloc.h
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/libexec/uucp/libuuconf/alloc.h')
-rw-r--r--gnu/libexec/uucp/libuuconf/alloc.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/gnu/libexec/uucp/libuuconf/alloc.h b/gnu/libexec/uucp/libuuconf/alloc.h
new file mode 100644
index 000000000000..c5c9cad8e32b
--- /dev/null
+++ b/gnu/libexec/uucp/libuuconf/alloc.h
@@ -0,0 +1,71 @@
+/* alloc.h
+ Header file for uuconf memory allocation routines.
+
+ Copyright (C) 1992 Ian Lance Taylor
+
+ This file is part of the Taylor UUCP uuconf library.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License
+ as published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ The author of the program may be contacted at ian@airs.com or
+ c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ */
+
+/* This header file is private to the uuconf memory allocation
+ routines, and should not be included by any other files. */
+
+/* We want to be able to keep track of allocated memory blocks, so
+ that we can free them up later. This will let us free up all the
+ memory allocated to hold information for a system, for example. We
+ do this by allocating large chunks and doling them out. Calling
+ uuconf_malloc_block will return a pointer to a magic cookie which
+ can then be passed to uuconf_malloc and uuconf_free. Passing the
+ pointer to uuconf_free_block will free all memory allocated for
+ that block. */
+
+/* We allocate this much space in each block. On most systems, this
+ will make the actual structure 1024 bytes, which may be convenient
+ for some types of memory allocators. */
+#define CALLOC_SIZE (1008)
+
+/* This is the actual structure of a block. */
+struct sblock
+{
+ /* Next block in linked list. */
+ struct sblock *qnext;
+ /* Index of next free spot. */
+ size_t ifree;
+ /* Last value returned by uuconf_malloc for this block. */
+ pointer plast;
+ /* List of additional memory blocks. */
+ struct sadded *qadded;
+ /* Buffer of data. We put it in a union with a double to make sure
+ it is adequately aligned. */
+ union
+ {
+ char ab[CALLOC_SIZE];
+ double l;
+ } u;
+};
+
+/* There is a linked list of additional memory blocks inserted by
+ uuconf_add_block. */
+struct sadded
+{
+ /* The next in the list. */
+ struct sadded *qnext;
+ /* The added block. */
+ pointer padded;
+};