#include <stdlib.h>#include <errno.h>void*calloc(size_tm,size_tn){void*p;size_t*z;if(n&&m>(size_t)-1/n){errno=ENOMEM;return0;}n*=m;p=malloc(n);if(!p)return0;/* Only do this for non-mmapped chunks */if(((size_t*)p)[-1]&7){/* Only write words that are not already zero */m=(n+sizeof*z-1)/sizeof*z;for(z=p;m;m--,z++)if(*z)*z=0;}returnp;}