]> code.delx.au - gnu-emacs/blob - oldXMenu/XCrAssoc.c
Remove FSF copyright since file does not differ significantly from X11
[gnu-emacs] / oldXMenu / XCrAssoc.c
1 /* Copyright Massachusetts Institute of Technology 1985 */
2 #include "copyright.h"
3
4
5 #include <config.h>
6 #include <X11/Xlib.h>
7 #include <errno.h>
8 #include "X10.h"
9
10 #ifndef NULL
11 #define NULL 0
12 #endif
13
14 extern int errno;
15
16 /*
17 * XCreateAssocTable - Create an XAssocTable. The size argument should be
18 * a power of two for efficiency reasons. Some size suggestions: use 32
19 * buckets per 100 objects; a reasonable maximum number of object per
20 * buckets is 8. If there is an error creating the XAssocTable, a NULL
21 * pointer is returned.
22 */
23 XAssocTable *XCreateAssocTable(size)
24 register int size; /* Desired size of the table. */
25 {
26 register XAssocTable *table; /* XAssocTable to be initialized. */
27 register XAssoc *buckets; /* Pointer to the first bucket in */
28 /* the bucket array. */
29
30 /* Malloc the XAssocTable. */
31 if ((table = (XAssocTable *)malloc(sizeof(XAssocTable))) == NULL) {
32 /* malloc call failed! */
33 errno = ENOMEM;
34 return(NULL);
35 }
36
37 /* calloc the buckets (actually just their headers). */
38 buckets = (XAssoc *)calloc((unsigned)size, (unsigned)sizeof(XAssoc));
39 if (buckets == NULL) {
40 /* calloc call failed! */
41 errno = ENOMEM;
42 return(NULL);
43 }
44
45 /* Insert table data into the XAssocTable structure. */
46 table->buckets = buckets;
47 table->size = size;
48
49 while (--size >= 0) {
50 /* Initialize each bucket. */
51 buckets->prev = buckets;
52 buckets->next = buckets;
53 buckets++;
54 }
55
56 return(table);
57 }
58
59 /* arch-tag: 5df3237d-ada0-4345-a3ab-282cafb397aa
60 (do not change this comment) */