/* * xcalloc -- a "safe" calloc */ char * xcalloc (number, size) int number, size; { extern char *malloc (); extern void memory_full(); register int total = number * size; register char *ptr = malloc (total); if (ptr != 0) { if (total > 100) bzero (ptr, total); else { /* It's not too long, so loop, zeroing by longs. It must be safe because malloc values are always well aligned. */ register long *zp = (long *) ptr; register long *zl = (long *) (ptr + total - 4); register int i = total - 4; while (zp < zl) *zp++ = 0; if (i < 0) i = 0; while (i < total) ptr[i++] = 0; } return ptr; } memory_full (); /*NOTREACHED*/ }