|
|
1.1 root 1: /* $XConsortium: XCrAssoc.c,v 10.17 91/01/06 12:04:57 rws Exp $ */
2: /* Copyright Massachusetts Institute of Technology 1985 */
3:
4: /*
5: Permission to use, copy, modify, distribute, and sell this software and its
6: documentation for any purpose is hereby granted without fee, provided that
7: the above copyright notice appear in all copies and that both that
8: copyright notice and this permission notice appear in supporting
9: documentation, and that the name of M.I.T. not be used in advertising or
10: publicity pertaining to distribution of the software without specific,
11: written prior permission. M.I.T. makes no representations about the
12: suitability of this software for any purpose. It is provided "as is"
13: without express or implied warranty.
14: */
15:
16: #include "X11/Xlib.h"
17: #include "X10.h"
18: #include "errno.h"
19:
20: #ifndef NULL
21: #define NULL 0
22: #endif
23:
24: extern int errno;
25:
26: /*
27: * XCreateAssocTable - Create an XAssocTable. The size argument should be
28: * a power of two for efficiency reasons. Some size suggestions: use 32
29: * buckets per 100 objects; a reasonable maximum number of object per
30: * buckets is 8. If there is an error creating the XAssocTable, a NULL
31: * pointer is returned.
32: */
33: XAssocTable *XCreateAssocTable(size)
34: register int size; /* Desired size of the table. */
35: {
36: register XAssocTable *table; /* XAssocTable to be initialized. */
37: register XAssoc *buckets; /* Pointer to the first bucket in */
38: /* the bucket array. */
39:
40: /* Malloc the XAssocTable. */
41: if ((table = (XAssocTable *)malloc(sizeof(XAssocTable))) == NULL) {
42: /* malloc call failed! */
43: errno = ENOMEM;
44: return(NULL);
45: }
46:
47: /* malloc the buckets (actually just their headers). */
48: buckets = (XAssoc *)calloc((unsigned)size, (unsigned)sizeof(XAssoc));
49: if (buckets == NULL) {
50: /* calloc call failed! */
51: errno = ENOMEM;
52: return(NULL);
53: }
54:
55: /* Insert table data into the XAssocTable structure. */
56: table->buckets = buckets;
57: table->size = size;
58:
59: while (--size >= 0) {
60: /* Initialize each bucket. */
61: buckets->prev = buckets;
62: buckets->next = buckets;
63: buckets++;
64: }
65:
66: return(table);
67: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.