2005-04-21 16:53:53 +02:00
|
|
|
/* $Header$ */
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
2010-05-04 23:02:44 +02:00
|
|
|
/* replace undef by define */
|
|
|
|
#define ALIGN_EIGHT_BYTES /* Use 8-byte alignment. */
|
|
|
|
|
|
|
|
#ifdef ALIGN_EIGHT_BYTES
|
|
|
|
#define ALIGN_SIZE 8
|
|
|
|
#else
|
|
|
|
#define ALIGN_SIZE sizeof(size_t)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define ALIGN(x) (((x) + (ALIGN_SIZE - 1)) & ~(ALIGN_SIZE - 1))
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
void *
|
|
|
|
calloc(size_t nelem, size_t elsize)
|
|
|
|
{
|
|
|
|
register char *p;
|
|
|
|
register size_t *q;
|
|
|
|
size_t size = ALIGN(nelem * elsize);
|
|
|
|
|
|
|
|
p = malloc(size);
|
|
|
|
if (p == NULL) return NULL;
|
|
|
|
q = (size_t *) (p + size);
|
|
|
|
while ((char *) q > p) *--q = 0;
|
|
|
|
return p;
|
|
|
|
}
|
|
|
|
|