1/* calloc() function that is glibc compatible. 2 This wrapper function is required at least on Tru64 UNIX 5.1. 3 Copyright (C) 2004, 2005 Free Software Foundation, Inc. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 2, or (at your option) 8 any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; if not, write to the Free Software Foundation, 17 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ 18 19/* written by Jim Meyering */ 20 21#ifdef HAVE_CONFIG_H 22# include <config.h> 23#endif 24#undef calloc 25 26#include <stdlib.h> 27 28/* Allocate and zero-fill an NxS-byte block of memory from the heap. 29 If N or S is zero, allocate and zero-fill a 1-byte block. */ 30 31void * 32rpl_calloc (size_t n, size_t s) 33{ 34 size_t bytes; 35 36 if (n == 0 || s == 0) 37 return calloc (1, 1); 38 39 /* Defend against buggy calloc implementations that mishandle 40 size_t overflow. */ 41 bytes = n * s; 42 if (bytes / s != n) 43 return NULL; 44 45 return calloc (n, s); 46} 47