From cead27eae68b5d8d7db36b1a2965c541c4a7eb54 Mon Sep 17 00:00:00 2001 From: Wolfgang Jenkner Date: Mon, 8 Feb 2016 17:16:15 +0100 Subject: [PATCH] Restore the calloc family. * src/gmalloc.c (calloc, gcalloc, hybrid_calloc): Restore definitions. They were lost in a4817d8 but calloc is still (marginally) used in code statically liked with emacs, so hybrid_calloc is needed. Also, in the non-hybrid case, we can't get rid of calloc anyway as other libraries liked with emacs may need it. * src/conf_post.h: Restore redefinition of calloc to hybrid_calloc. --- src/conf_post.h | 1 + src/gmalloc.c | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/conf_post.h b/src/conf_post.h index c5eec5a..2788abf 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -100,6 +100,7 @@ typedef bool bool_bf; #define malloc hybrid_malloc #define realloc hybrid_realloc #define aligned_alloc hybrid_aligned_alloc +#define calloc hybrid_calloc #define free hybrid_free #endif #endif /* HYBRID_MALLOC */ diff --git a/src/gmalloc.c b/src/gmalloc.c index 0b76aee..dd18293 100644 --- a/src/gmalloc.c +++ b/src/gmalloc.c @@ -72,7 +72,7 @@ extern void *(*__morecore) (ptrdiff_t); #undef free #define malloc gmalloc #define realloc grealloc -#define calloc do_not_call_me /* Emacs never calls calloc. */ +#define calloc gcalloc #define aligned_alloc galigned_alloc #define free gfree #define malloc_info gmalloc_info @@ -101,6 +101,8 @@ extern void *malloc (size_t size) ATTRIBUTE_MALLOC_SIZE ((1)); /* Re-allocate the previously allocated block in ptr, making the new block SIZE bytes long. */ extern void *realloc (void *ptr, size_t size) ATTRIBUTE_ALLOC_SIZE ((2)); +/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0. */ +extern void *calloc (size_t nmemb, size_t size) ATTRIBUTE_MALLOC_SIZE ((1,2)); /* Free a block. */ extern void free (void *ptr); @@ -1465,7 +1467,6 @@ License along with this library. If not, see . /* Allocate an array of NMEMB elements each SIZE bytes long. The entire array is initialized to zeros. */ -#ifndef calloc void * calloc (size_t nmemb, size_t size) { @@ -1483,7 +1484,6 @@ calloc (size_t nmemb, size_t size) return memset (result, 0, bytes); return result; } -#endif /* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -1714,6 +1714,7 @@ valloc (size_t size) /* Declare system malloc and friends. */ extern void *malloc (size_t size); extern void *realloc (void *ptr, size_t size); +extern void *calloc (size_t nmemb, size_t size); extern void free (void *ptr); #ifdef HAVE_ALIGNED_ALLOC extern void *aligned_alloc (size_t alignment, size_t size); @@ -1732,6 +1733,14 @@ hybrid_malloc (size_t size) return gmalloc (size); } +void * +hybrid_calloc (size_t nmemb, size_t size) +{ + if (DUMPED) + return calloc (nmemb, size); + return gcalloc (nmemb, size); +} + void hybrid_free (void *ptr) { -- 2.7.0