Fix hang with large yanks
[emacs.git] / oldXMenu / XCrAssoc.c
blob94434814063afb807d727abd502c84ea0c6d2384
1 /* Copyright Massachusetts Institute of Technology 1985 */
2 #include "copyright.h"
5 #include <config.h>
6 #include <X11/Xlib.h>
7 #include <errno.h>
8 #include "X10.h"
10 #ifndef NULL
11 #define NULL 0
12 #endif
15 * XCreateAssocTable - Create an XAssocTable. The size argument should be
16 * a power of two for efficiency reasons. Some size suggestions: use 32
17 * buckets per 100 objects; a reasonable maximum number of object per
18 * buckets is 8. If there is an error creating the XAssocTable, a NULL
19 * pointer is returned.
21 XAssocTable *XCreateAssocTable(register int size)
22 /* Desired size of the table. */
24 register XAssocTable *table; /* XAssocTable to be initialized. */
25 register XAssoc *buckets; /* Pointer to the first bucket in */
26 /* the bucket array. */
28 /* Malloc the XAssocTable. */
29 if ((table = (XAssocTable *)malloc(sizeof(XAssocTable))) == NULL) {
30 /* malloc call failed! */
31 errno = ENOMEM;
32 return(NULL);
35 /* calloc the buckets (actually just their headers). */
36 buckets = (XAssoc *)calloc((unsigned)size, (unsigned)sizeof(XAssoc));
37 if (buckets == NULL) {
38 /* calloc call failed! */
39 errno = ENOMEM;
40 return(NULL);
43 /* Insert table data into the XAssocTable structure. */
44 table->buckets = buckets;
45 table->size = size;
47 while (--size >= 0) {
48 /* Initialize each bucket. */
49 buckets->prev = buckets;
50 buckets->next = buckets;
51 buckets++;
54 return(table);