|
|
1.1 root 1: /* alloc.h
2: Header file for uuconf memory allocation routines.
3:
4: Copyright (C) 1992 Ian Lance Taylor
5:
6: This file is part of the Taylor UUCP uuconf library.
7:
8: This library is free software; you can redistribute it and/or
9: modify it under the terms of the GNU Library General Public License
10: as published by the Free Software Foundation; either version 2 of
11: the License, or (at your option) any later version.
12:
13: This library is distributed in the hope that it will be useful, but
14: WITHOUT ANY WARRANTY; without even the implied warranty of
15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16: Library General Public License for more details.
17:
18: You should have received a copy of the GNU Library General Public
19: License along with this library; if not, write to the Free Software
20: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21:
22: The author of the program may be contacted at [email protected] or
23: c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
24: */
25:
26: /* This header file is private to the uuconf memory allocation
27: routines, and should not be included by any other files. */
28:
29: /* We want to be able to keep track of allocated memory blocks, so
30: that we can free them up later. This will let us free up all the
31: memory allocated to hold information for a system, for example. We
32: do this by allocating large chunks and doling them out. Calling
33: uuconf_malloc_block will return a pointer to a magic cookie which
34: can then be passed to uuconf_malloc and uuconf_free. Passing the
35: pointer to uuconf_free_block will free all memory allocated for
36: that block. */
37:
38: /* We allocate this much space in each block. On most systems, this
39: will make the actual structure 1024 bytes, which may be convenient
40: for some types of memory allocators. */
41: #define CALLOC_SIZE (1008)
42:
43: /* This is the actual structure of a block. */
44: struct sblock
45: {
46: /* Next block in linked list. */
47: struct sblock *qnext;
48: /* Index of next free spot. */
49: size_t ifree;
50: /* Last value returned by uuconf_malloc for this block. */
51: pointer plast;
52: /* List of additional memory blocks. */
53: struct sadded *qadded;
54: /* Buffer of data. We put it in a union with a double to make sure
55: it is adequately aligned. */
56: union
57: {
58: char ab[CALLOC_SIZE];
59: double l;
60: } u;
61: };
62:
63: /* There is a linked list of additional memory blocks inserted by
64: uuconf_add_block. */
65: struct sadded
66: {
67: /* The next in the list. */
68: struct sadded *qnext;
69: /* The added block. */
70: pointer padded;
71: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.