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.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/lib/libc/stdlib/calloc.c b/src/lib/libc/stdlib/calloc.c
index 3353fab052..c75b256d14 100644
--- a/src/lib/libc/stdlib/calloc.c
+++ b/src/lib/libc/stdlib/calloc.c
@@ -32,12 +32,13 @@
32 */ 32 */
33 33
34#if defined(LIBC_SCCS) && !defined(lint) 34#if defined(LIBC_SCCS) && !defined(lint)
35/*static char *sccsid = "from: @(#)calloc.c 5.6 (Berkeley) 2/23/91";*/ 35static char *rcsid = "$OpenBSD: calloc.c,v 1.7 2002/07/31 09:19:04 deraadt 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 */ 36#endif /* LIBC_SCCS and not lint */
38 37
39#include <stdlib.h> 38#include <stdlib.h>
40#include <string.h> 39#include <string.h>
40#include <limits.h>
41#include <errno.h>
41 42
42void * 43void *
43calloc(num, size) 44calloc(num, size)
@@ -46,8 +47,13 @@ calloc(num, size)
46{ 47{
47 register void *p; 48 register void *p;
48 49
50 if (num && size && SIZE_T_MAX / num < size) {
51 errno = ENOMEM;
52 return NULL;
53 }
49 size *= num; 54 size *= num;
50 if (p = malloc(size)) 55 p = malloc(size);
51 memset(p, '\0', size); 56 if (p)
57 memset(p, 0, size);
52 return(p); 58 return(p);
53} 59}