summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormillert <>1999-11-10 20:12:31 +0000
committermillert <>1999-11-10 20:12:31 +0000
commit97d0d1b9cdde83cad131a8958b37c806ca2ae6c8 (patch)
tree69f5b879a38e8843415014af37d0e31df7f77d69
parent804f568be8b94c5d121b519265452c56bd2efb50 (diff)
downloadopenbsd-97d0d1b9cdde83cad131a8958b37c806ca2ae6c8.tar.gz
openbsd-97d0d1b9cdde83cad131a8958b37c806ca2ae6c8.tar.bz2
openbsd-97d0d1b9cdde83cad131a8958b37c806ca2ae6c8.zip
calloc() needs to be separate from malloc in case a user wants to have
their own malloc() implementation.
-rw-r--r--src/lib/libc/stdlib/calloc.c53
-rw-r--r--src/lib/libc/stdlib/malloc.c26
2 files changed, 54 insertions, 25 deletions
diff --git a/src/lib/libc/stdlib/calloc.c b/src/lib/libc/stdlib/calloc.c
new file mode 100644
index 0000000000..e79d71f93e
--- /dev/null
+++ b/src/lib/libc/stdlib/calloc.c
@@ -0,0 +1,53 @@
1/*-
2 * Copyright (c) 1990 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
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
19 * without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34#if defined(LIBC_SCCS) && !defined(lint)
35static char *rcsid = "$OpenBSD: calloc.c,v 1.5 1999/11/10 20:12:31 millert Exp $";
36#endif /* LIBC_SCCS and not lint */
37
38#include <stdlib.h>
39#include <string.h>
40
41void *
42calloc(num, size)
43 size_t num;
44 register size_t size;
45{
46 register void *p;
47
48 size *= num;
49 p = malloc(size);
50 if (p)
51 memset(p, 0, size);
52 return(p);
53}
diff --git a/src/lib/libc/stdlib/malloc.c b/src/lib/libc/stdlib/malloc.c
index 3582d7980c..88e25995f3 100644
--- a/src/lib/libc/stdlib/malloc.c
+++ b/src/lib/libc/stdlib/malloc.c
@@ -8,7 +8,7 @@
8 */ 8 */
9 9
10#if defined(LIBC_SCCS) && !defined(lint) 10#if defined(LIBC_SCCS) && !defined(lint)
11static char rcsid[] = "$OpenBSD: malloc.c,v 1.37 1999/11/09 19:25:33 millert Exp $"; 11static char rcsid[] = "$OpenBSD: malloc.c,v 1.38 1999/11/10 20:12:31 millert Exp $";
12#endif /* LIBC_SCCS and not lint */ 12#endif /* LIBC_SCCS and not lint */
13 13
14/* 14/*
@@ -1278,27 +1278,3 @@ realloc(void *ptr, size_t size)
1278 wrterror("out of memory.\n"); 1278 wrterror("out of memory.\n");
1279 return (r); 1279 return (r);
1280} 1280}
1281
1282void *
1283calloc(size_t num, size_t size)
1284{
1285 register void *r;
1286
1287 malloc_func = " in calloc():";
1288 THREAD_LOCK();
1289 if (malloc_active++) {
1290 wrtwarning("recursive call.\n");
1291 malloc_active--;
1292 return (0);
1293 }
1294 size *= num;
1295 r = imalloc(size);
1296 if (r && !malloc_zero)
1297 memset(r, 0, size)
1298 UTRACE(0, size, r);
1299 malloc_active--;
1300 THREAD_UNLOCK();
1301 if (malloc_xmalloc && !r)
1302 wrterror("out of memory.\n");
1303 return (r);
1304}