summaryrefslogtreecommitdiff
path: root/src/lib/libc/stdlib/calloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libc/stdlib/calloc.c')
-rw-r--r--src/lib/libc/stdlib/calloc.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/lib/libc/stdlib/calloc.c b/src/lib/libc/stdlib/calloc.c
index 3353fab052..b0703cc884 100644
--- a/src/lib/libc/stdlib/calloc.c
+++ b/src/lib/libc/stdlib/calloc.c
@@ -10,11 +10,7 @@
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the 11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution. 12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software 13 * 3. Neither the name of the University nor the names of its contributors
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software 14 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission. 15 * without specific prior written permission.
20 * 16 *
@@ -32,12 +28,13 @@
32 */ 28 */
33 29
34#if defined(LIBC_SCCS) && !defined(lint) 30#if defined(LIBC_SCCS) && !defined(lint)
35/*static char *sccsid = "from: @(#)calloc.c 5.6 (Berkeley) 2/23/91";*/ 31static char *rcsid = "$OpenBSD: calloc.c,v 1.8 2003/06/02 20:18:37 millert Exp $";
36static char *rcsid = "$Id: calloc.c,v 1.1.1.1 1995/10/18 08:42:17 deraadt Exp $";
37#endif /* LIBC_SCCS and not lint */ 32#endif /* LIBC_SCCS and not lint */
38 33
39#include <stdlib.h> 34#include <stdlib.h>
40#include <string.h> 35#include <string.h>
36#include <limits.h>
37#include <errno.h>
41 38
42void * 39void *
43calloc(num, size) 40calloc(num, size)
@@ -46,8 +43,13 @@ calloc(num, size)
46{ 43{
47 register void *p; 44 register void *p;
48 45
46 if (num && size && SIZE_T_MAX / num < size) {
47 errno = ENOMEM;
48 return NULL;
49 }
49 size *= num; 50 size *= num;
50 if (p = malloc(size)) 51 p = malloc(size);
51 memset(p, '\0', size); 52 if (p)
53 memset(p, 0, size);
52 return(p); 54 return(p);
53} 55}