160484Sobrien/* calloc -- allocate memory which has been initialized to zero.
260484Sobrien   This function is in the public domain. */
389857Sobrien
489857Sobrien/*
589857Sobrien
689857Sobrien@deftypefn Supplemental void* calloc (size_t @var{nelem}, size_t @var{elsize})
789857Sobrien
889857SobrienUses @code{malloc} to allocate storage for @var{nelem} objects of
989857Sobrien@var{elsize} bytes each, then zeros the memory.
1089857Sobrien
1189857Sobrien@end deftypefn
1289857Sobrien
1389857Sobrien*/
1460484Sobrien
1560484Sobrien#include "ansidecl.h"
1660484Sobrien#include <stddef.h>
1760484Sobrien
1860484Sobrien/* For systems with larger pointers than ints, this must be declared.  */
19218822SdimPTR malloc (size_t);
20218822Sdimvoid bzero (PTR, size_t);
2160484Sobrien
2260484SobrienPTR
23218822Sdimcalloc (size_t nelem, size_t elsize)
2460484Sobrien{
2560484Sobrien  register PTR ptr;
2660484Sobrien
2760484Sobrien  if (nelem == 0 || elsize == 0)
2860484Sobrien    nelem = elsize = 1;
2960484Sobrien
3060484Sobrien  ptr = malloc (nelem * elsize);
3160484Sobrien  if (ptr) bzero (ptr, nelem * elsize);
3260484Sobrien
3360484Sobrien  return ptr;
3460484Sobrien}
35