diff options
-rw-r--r-- | lib/libc/stdlib/Makefile.inc | 2 | ||||
-rw-r--r-- | lib/libc/stdlib/calloc.c | 53 | ||||
-rw-r--r-- | lib/libc/stdlib/malloc.c | 26 |
3 files changed, 26 insertions, 55 deletions
diff --git a/lib/libc/stdlib/Makefile.inc b/lib/libc/stdlib/Makefile.inc index 3191f08328c..b1c20d08cd8 100644 --- a/lib/libc/stdlib/Makefile.inc +++ b/lib/libc/stdlib/Makefile.inc @@ -3,7 +3,7 @@ # stdlib sources .PATH: ${LIBCSRCDIR}/arch/${MACHINE_ARCH}/stdlib ${LIBCSRCDIR}/stdlib -SRCS+= a64l.c abort.c atexit.c atoi.c atof.c atol.c bsearch.c calloc.c \ +SRCS+= a64l.c abort.c atexit.c atoi.c atof.c atol.c bsearch.c \ cfree.c exit.c getenv.c getopt.c getsubopt.c heapsort.c l64a.c \ malloc.c merge.c multibyte.c putenv.c qsort.c radixsort.c rand.c \ random.c realpath.c setenv.c strtod.c strtol.c strtoq.c strtoul.c \ diff --git a/lib/libc/stdlib/calloc.c b/lib/libc/stdlib/calloc.c deleted file mode 100644 index a2c4f844930..00000000000 --- a/lib/libc/stdlib/calloc.c +++ /dev/null @@ -1,53 +0,0 @@ -/*- - * Copyright (c) 1990 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static char *rcsid = "$OpenBSD: calloc.c,v 1.3 1996/08/20 17:42:33 downsj Exp $"; -#endif /* LIBC_SCCS and not lint */ - -#include <stdlib.h> -#include <string.h> - -void * -calloc(num, size) - size_t num; - register size_t size; -{ - register void *p; - - size *= num; - p = malloc(size); - if (p) - memset(p, '\0', size); - return(p); -} diff --git a/lib/libc/stdlib/malloc.c b/lib/libc/stdlib/malloc.c index 8b90bb5d57b..3582d7980cc 100644 --- a/lib/libc/stdlib/malloc.c +++ b/lib/libc/stdlib/malloc.c @@ -8,7 +8,7 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static char rcsid[] = "$OpenBSD: malloc.c,v 1.36 1999/09/16 19:06:06 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: malloc.c,v 1.37 1999/11/09 19:25:33 millert Exp $"; #endif /* LIBC_SCCS and not lint */ /* @@ -1278,3 +1278,27 @@ realloc(void *ptr, size_t size) wrterror("out of memory.\n"); return (r); } + +void * +calloc(size_t num, size_t size) +{ + register void *r; + + malloc_func = " in calloc():"; + THREAD_LOCK(); + if (malloc_active++) { + wrtwarning("recursive call.\n"); + malloc_active--; + return (0); + } + size *= num; + r = imalloc(size); + if (r && !malloc_zero) + memset(r, 0, size) + UTRACE(0, size, r); + malloc_active--; + THREAD_UNLOCK(); + if (malloc_xmalloc && !r) + wrterror("out of memory.\n"); + return (r); +} |