From 698d2c6803ac9f329c0f46aed89b385680b3a31e Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 7 Aug 2002 07:57:49 +0000 Subject: Per suggestion from Miles Bader, move calloc.c to libc/stdlib. Also, Manuel notices that I forgot to check for when nmemb=0, which would result in a segfault, so fix that case as well. -Erik --- libc/stdlib/Makefile | 12 +++++------ libc/stdlib/calloc.c | 41 ++++++++++++++++++++++++++++++++++++++ libc/stdlib/malloc-930716/Makefile | 3 ++- libc/stdlib/malloc-930716/calloc.c | 39 ------------------------------------ libc/stdlib/malloc/Makefile | 3 ++- 5 files changed, 51 insertions(+), 47 deletions(-) create mode 100644 libc/stdlib/calloc.c delete mode 100644 libc/stdlib/malloc-930716/calloc.c diff --git a/libc/stdlib/Makefile b/libc/stdlib/Makefile index d7cdb3129..abf0054cc 100644 --- a/libc/stdlib/Makefile +++ b/libc/stdlib/Makefile @@ -44,12 +44,12 @@ endif MSRC2=atexit.c MOBJ2=atexit.o on_exit.o __exit_handler.o exit.o -CSRC = abort.c getenv.c mktemp.c realpath.c \ - mkstemp.c mkstemp64.c rand.c random.c random_r.c setenv.c \ - system.c div.c ldiv.c getpt.c ptsname.c grantpt.c unlockpt.c -CSRC+= gcvt.c drand48.c drand48-iter.c drand48_r.c erand48.c erand48_r.c \ - jrand48.c jrand48_r.c lrand48.c lrand48_r.c mrand48.c mrand48_r.c \ - nrand48.c nrand48_r.c rand_r.c srand48.c srand48_r.c +CSRC = abort.c getenv.c mktemp.c realpath.c mkstemp.c mkstemp64.c \ + rand.c random.c random_r.c setenv.c system.c div.c ldiv.c \ + getpt.c ptsname.c grantpt.c unlockpt.c gcvt.c drand48.c \ + drand48-iter.c drand48_r.c erand48.c erand48_r.c jrand48.c \ + jrand48_r.c lrand48.c lrand48_r.c mrand48.c mrand48_r.c \ + nrand48.c nrand48_r.c rand_r.c srand48.c srand48_r.c calloc.c ifeq ($(HAS_FLOATING_POINT),true) CSRC += strtod.c strtof.c strtold.c endif diff --git a/libc/stdlib/calloc.c b/libc/stdlib/calloc.c new file mode 100644 index 000000000..15281a97f --- /dev/null +++ b/libc/stdlib/calloc.c @@ -0,0 +1,41 @@ +/* vi: set sw=4 ts=4: */ +/* calloc for uClibc + * + * Copyright (C) 2002 by Erik Andersen + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Library General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + * for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include + +void * calloc(size_t nmemb, size_t lsize) +{ + void *result; + size_t size=lsize * nmemb; + + /* guard vs integer overflow, but allow nmemb + * to fall through and call malloc(0) */ + if (nmemb && lsize != (size / nmemb)) { + __set_errno(ENOMEM); + return NULL; + } + if ((result=malloc(size)) != NULL) { + memset(result, 0, size); + } + return result; +} + diff --git a/libc/stdlib/malloc-930716/Makefile b/libc/stdlib/malloc-930716/Makefile index 07dc94898..cc746707e 100644 --- a/libc/stdlib/malloc-930716/Makefile +++ b/libc/stdlib/malloc-930716/Makefile @@ -24,7 +24,8 @@ TOPDIR=../../../ include $(TOPDIR)Rules.mak -CSRC=calloc.c malloc.c +# calloc.c can be found at uClibc/libc/stdlib/calloc.c +CSRC=malloc.c COBJS=$(patsubst %.c,%.o, $(CSRC)) OBJS=$(COBJS) diff --git a/libc/stdlib/malloc-930716/calloc.c b/libc/stdlib/malloc-930716/calloc.c deleted file mode 100644 index e97db496d..000000000 --- a/libc/stdlib/malloc-930716/calloc.c +++ /dev/null @@ -1,39 +0,0 @@ -/* vi: set sw=4 ts=4: */ -/* calloc for uClibc - * - * Copyright (C) 2002 by Erik Andersen - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Library General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License - * for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include - -void * calloc(size_t nmemb, size_t lsize) -{ - void *result; - size_t size=lsize * nmemb; - - /* guard vs integer overflow */ - if (lsize != (size / nmemb)) { - __set_errno(ENOMEM); - return NULL; - } - if ((result=malloc(size))) { - memset(result, 0, size); - } - return result; -} diff --git a/libc/stdlib/malloc/Makefile b/libc/stdlib/malloc/Makefile index 30e5b9e2a..ecf05377d 100644 --- a/libc/stdlib/malloc/Makefile +++ b/libc/stdlib/malloc/Makefile @@ -24,8 +24,9 @@ TOPDIR=../../../ include $(TOPDIR)Rules.mak +# calloc.c can be found at uClibc/libc/stdlib/calloc.c CSRC = malloc.o free.o realloc.o heap_alloc.o \ - heap_alloc_at.o heap_free.o ../malloc-930716/calloc.o + heap_alloc_at.o heap_free.o COBJS=$(patsubst %.c,%.o, $(CSRC)) OBJS=$(COBJS) -- cgit v1.2.3