|
|
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.