summaryrefslogtreecommitdiff
path: root/libc
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2002-08-07 07:57:49 +0000
committerEric Andersen <andersen@codepoet.org>2002-08-07 07:57:49 +0000
commit698d2c6803ac9f329c0f46aed89b385680b3a31e (patch)
tree59793ecae777f3d2a480bef1be1af4f39e76f9c6 /libc
parent99eb56df380e887832f121dc3680d4d7848a0050 (diff)
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
Diffstat (limited to 'libc')
-rw-r--r--libc/stdlib/Makefile12
-rw-r--r--libc/stdlib/calloc.c (renamed from libc/stdlib/malloc-930716/calloc.c)8
-rw-r--r--libc/stdlib/malloc-930716/Makefile3
-rw-r--r--libc/stdlib/malloc/Makefile3
4 files changed, 15 insertions, 11 deletions
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/malloc-930716/calloc.c b/libc/stdlib/calloc.c
index e97db496d..15281a97f 100644
--- a/libc/stdlib/malloc-930716/calloc.c
+++ b/libc/stdlib/calloc.c
@@ -27,13 +27,15 @@ void * calloc(size_t nmemb, size_t lsize)
void *result;
size_t size=lsize * nmemb;
- /* guard vs integer overflow */
- if (lsize != (size / 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))) {
+ 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/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)