Browse Source

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

Eric Andersen 22 years ago
parent
commit
698d2c6803
4 changed files with 15 additions and 11 deletions
  1. 6 6
      libc/stdlib/Makefile
  2. 5 3
      libc/stdlib/calloc.c
  3. 2 1
      libc/stdlib/malloc-930716/Makefile
  4. 2 1
      libc/stdlib/malloc/Makefile

+ 6 - 6
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

+ 5 - 3
libc/stdlib/malloc-930716/calloc.c → 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;
 }
+

+ 2 - 1
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)
 

+ 2 - 1
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)