/*
 * 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*/
}
