summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormillert <>1999-11-09 19:25:33 +0000
committermillert <>1999-11-09 19:25:33 +0000
commit5d55745080b705a4223d109d1dbbd95cf1072a73 (patch)
tree358f23b9e3de9b2efb9df202c8cbba230073c891
parentc3c518ea633f6a6753cac521b770066c6f7cc498 (diff)
downloadopenbsd-5d55745080b705a4223d109d1dbbd95cf1072a73.tar.gz
openbsd-5d55745080b705a4223d109d1dbbd95cf1072a73.tar.bz2
openbsd-5d55745080b705a4223d109d1dbbd95cf1072a73.zip
Move calloc() into malloc.c and only zero out the area if malloc()
didn't do so for us. By default, malloc() zeros out the space it allocates but the programmer cannot rely on this as it is implementation- specific (and configurable via /etc/malloc.conf)
-rw-r--r--src/lib/libc/stdlib/Makefile.inc2
-rw-r--r--src/lib/libc/stdlib/calloc.c53
-rw-r--r--src/lib/libc/stdlib/malloc.c26
3 files changed, 26 insertions, 55 deletions
diff --git a/src/lib/libc/stdlib/Makefile.inc b/src/lib/libc/stdlib/Makefile.inc
index 3191f08328..b1c20d08cd 100644
--- a/src/lib/libc/stdlib/Makefile.inc
+++ b/src/lib/libc/stdlib/Makefile.inc
@@ -3,7 +3,7 @@
3# stdlib sources 3# stdlib sources
4.PATH: ${LIBCSRCDIR}/arch/${MACHINE_ARCH}/stdlib ${LIBCSRCDIR}/stdlib 4.PATH: ${LIBCSRCDIR}/arch/${MACHINE_ARCH}/stdlib ${LIBCSRCDIR}/stdlib
5 5
6SRCS+= a64l.c abort.c atexit.c atoi.c atof.c atol.c bsearch.c calloc.c \ 6SRCS+= a64l.c abort.c atexit.c atoi.c atof.c atol.c bsearch.c \
7 cfree.c exit.c getenv.c getopt.c getsubopt.c heapsort.c l64a.c \ 7 cfree.c exit.c getenv.c getopt.c getsubopt.c heapsort.c l64a.c \
8 malloc.c merge.c multibyte.c putenv.c qsort.c radixsort.c rand.c \ 8 malloc.c merge.c multibyte.c putenv.c qsort.c radixsort.c rand.c \
9 random.c realpath.c setenv.c strtod.c strtol.c strtoq.c strtoul.c \ 9 random.c realpath.c setenv.c strtod.c strtol.c strtoq.c strtoul.c \
diff --git a/src/lib/libc/stdlib/calloc.c b/src/lib/libc/stdlib/calloc.c
deleted file mode 100644
index a2c4f84493..0000000000
--- a/src/lib/libc/stdlib/calloc.c
+++ /dev/null
@@ -1,53 +0,0 @@
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.3 1996/08/20 17:42:33 downsj 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 8b90bb5d57..3582d7980c 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.36 1999/09/16 19:06:06 deraadt Exp $"; 11static char rcsid[] = "$OpenBSD: malloc.c,v 1.37 1999/11/09 19:25:33 millert Exp $";
12#endif /* LIBC_SCCS and not lint */ 12#endif /* LIBC_SCCS and not lint */
13 13
14/* 14/*
@@ -1278,3 +1278,27 @@ 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}