diff options
author | Otto Moerbeek <otto@cvs.openbsd.org> | 2008-05-19 19:36:16 +0000 |
---|---|---|
committer | Otto Moerbeek <otto@cvs.openbsd.org> | 2008-05-19 19:36:16 +0000 |
commit | ceaf15a4e288e58d164779b942f96ae9dd998ced (patch) | |
tree | e7750e810a47639f13bce129c0c1472c5f19439c /lib/libc/stdlib | |
parent | f7db40e81e5e63bdd1596046e4813bbc45a75d79 (diff) |
remove recalloc(3); it is buggy and impossible to repair without big
costs; ok jmc@ for the man page bits; ok millert@ deraadt@
Diffstat (limited to 'lib/libc/stdlib')
-rw-r--r-- | lib/libc/stdlib/Makefile.inc | 4 | ||||
-rw-r--r-- | lib/libc/stdlib/malloc.3 | 28 | ||||
-rw-r--r-- | lib/libc/stdlib/malloc.c | 50 |
3 files changed, 20 insertions, 62 deletions
diff --git a/lib/libc/stdlib/Makefile.inc b/lib/libc/stdlib/Makefile.inc index 04e84fe9412..b4b716dd71d 100644 --- a/lib/libc/stdlib/Makefile.inc +++ b/lib/libc/stdlib/Makefile.inc @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile.inc,v 1.36 2007/09/03 14:37:02 millert Exp $ +# $OpenBSD: Makefile.inc,v 1.37 2008/05/19 19:36:15 otto Exp $ # stdlib sources .PATH: ${LIBCSRCDIR}/arch/${MACHINE_ARCH}/stdlib ${LIBCSRCDIR}/stdlib @@ -55,7 +55,7 @@ MLINKS+=insque.3 remque.3 MLINKS+=labs.3 llabs.3 MLINKS+=lsearch.3 lfind.3 MLINKS+=malloc.3 free.3 malloc.3 realloc.3 malloc.3 calloc.3 -MLINKS+=malloc.3 recalloc.3 malloc.3 cfree.3 malloc.3 malloc.conf.5 +MLINKS+=malloc.3 cfree.3 malloc.3 malloc.conf.5 MLINKS+=qsort.3 heapsort.3 qsort.3 mergesort.3 MLINKS+=radixsort.3 sradixsort.3 MLINKS+=rand.3 srand.3 rand.3 rand_r.3 diff --git a/lib/libc/stdlib/malloc.3 b/lib/libc/stdlib/malloc.3 index e82dc45842d..1b481933cae 100644 --- a/lib/libc/stdlib/malloc.3 +++ b/lib/libc/stdlib/malloc.3 @@ -30,16 +30,15 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $OpenBSD: malloc.3,v 1.50 2007/09/05 06:03:08 deraadt Exp $ +.\" $OpenBSD: malloc.3,v 1.51 2008/05/19 19:36:15 otto Exp $ .\" -.Dd $Mdocdate: September 5 2007 $ +.Dd $Mdocdate: May 19 2008 $ .Dt MALLOC 3 .Os .Sh NAME .Nm malloc , .Nm calloc , .Nm realloc , -.Nm recalloc , .Nm free , .Nm cfree .Nd memory allocation and deallocation @@ -51,8 +50,6 @@ .Fn calloc "size_t nmemb" "size_t size" .Ft void * .Fn realloc "void *ptr" "size_t size" -.Ft void * -.Fn recalloc "void *ptr" "size_t nmemb" "size_t size" .Ft void .Fn free "void *ptr" .Ft void @@ -206,18 +203,7 @@ if ((newp = realloc(p, num * size)) == NULL) { ... .Ed .Pp -The -.Fn recalloc -function is similar to -.Fn realloc -except that it shares semantics with -.Fn calloc -rather than -.Fn malloc . -Newly allocated space is initialized to zero and the resulting size is -checked for integer overflow. -.Pp -These functions will first look for a symbolic link called +Malloc will first look for a symbolic link called .Pa /etc/malloc.conf and next check the environment for a variable called .Ev MALLOC_OPTIONS @@ -272,8 +258,6 @@ sizeof(ptr) errors where sizeof(*ptr) is meant. .Dq realloc . Always reallocate when .Fn realloc -or -.Fn recalloc is called, even if the initial allocation was big enough. This can substantially aid in compacting memory. .\".Pp @@ -458,12 +442,6 @@ The .Fn malloc function conforms to .St -ansiC . -.Pp -The -.Fn recalloc -function is an -.Ox -extension. .Sh HISTORY The present implementation of .Fn malloc diff --git a/lib/libc/stdlib/malloc.c b/lib/libc/stdlib/malloc.c index c4869527adb..a4a4e52bda6 100644 --- a/lib/libc/stdlib/malloc.c +++ b/lib/libc/stdlib/malloc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: malloc.c,v 1.89 2008/04/13 00:22:16 djm Exp $ */ +/* $OpenBSD: malloc.c,v 1.90 2008/05/19 19:36:15 otto Exp $ */ /* * ---------------------------------------------------------------------------- @@ -250,9 +250,9 @@ static char *malloc_func; /* * Necessary function declarations. */ -static void *imalloc(size_t size, int zero_fill); +static void *imalloc(size_t size); static void ifree(void *ptr); -static void *irealloc(void *ptr, size_t size, int zero_fill); +static void *irealloc(void *ptr, size_t size); static void *malloc_bytes(size_t size); static struct pginfo *pginfo_list; @@ -1188,7 +1188,7 @@ malloc_bytes(size_t size) * Allocate a piece of memory */ static void * -imalloc(size_t size, int zero_fill) +imalloc(size_t size) { void *result; int ptralloc = 0; @@ -1218,7 +1218,7 @@ imalloc(size_t size, int zero_fill) if (malloc_abort == 1 && result == NULL) wrterror("allocation failed"); - if ((malloc_zero || zero_fill) && result != NULL) + if (malloc_zero && result != NULL) memset(result, 0, size); if (result && ptralloc) @@ -1230,7 +1230,7 @@ imalloc(size_t size, int zero_fill) * Change the size of an allocation. */ static void * -irealloc(void *ptr, size_t size, int zero_fill) +irealloc(void *ptr, size_t size) { void *p; size_t osize; @@ -1253,7 +1253,7 @@ irealloc(void *ptr, size_t size, int zero_fill) if (size <= PTR_SIZE) return (ptr); - p = imalloc(size, zero_fill); + p = imalloc(size); if (p) memcpy(p, ptr, PTR_SIZE); ifree(ptr); @@ -1315,9 +1315,7 @@ irealloc(void *ptr, size_t size, int zero_fill) if (!malloc_realloc && size <= osize && size > osize - malloc_pagesize) { - if (zero_fill) - memset((char *)ptr + size, 0, osize - size); - else if (malloc_junk) + if (malloc_junk) memset((char *)ptr + size, SOME_JUNK, osize - size); return (ptr); /* ..don't do anything else. */ } @@ -1340,9 +1338,7 @@ irealloc(void *ptr, size_t size, int zero_fill) if (!malloc_realloc && size <= osize && (size > osize / 2 || osize == malloc_minsize)) { - if (zero_fill) - memset((char *) ptr + size, 0, osize - size); - else if (malloc_junk) + if (malloc_junk) memset((char *) ptr + size, SOME_JUNK, osize - size); return (ptr); /* ..don't do anything else. */ } @@ -1351,7 +1347,7 @@ irealloc(void *ptr, size_t size, int zero_fill) return (NULL); } - p = imalloc(size, zero_fill); + p = imalloc(size); if (p != NULL) { /* copy the lesser of the two sizes, and free the old one */ @@ -1880,7 +1876,7 @@ malloc(size_t size) malloc_recurse(); return (NULL); } - r = imalloc(size, 0); + r = imalloc(size); UTRACE(0, size, r); malloc_active--; _MALLOC_UNLOCK(); @@ -1911,8 +1907,8 @@ free(void *ptr) return; } -static void * -_realloc(void *ptr, size_t size, int zero_fill) +void * +realloc(void *ptr, size_t size) { void *r; @@ -1924,9 +1920,9 @@ _realloc(void *ptr, size_t size, int zero_fill) } if (ptr == NULL) - r = imalloc(size, zero_fill); + r = imalloc(size); else - r = irealloc(ptr, size, zero_fill); + r = irealloc(ptr, size); UTRACE(ptr, size, r); malloc_active--; @@ -1937,19 +1933,3 @@ _realloc(void *ptr, size_t size, int zero_fill) } return (r); } - -void * -realloc(void *ptr, size_t size) -{ - return (_realloc(ptr, size, 0)); -} - -void * -recalloc(void *ptr, size_t nmemb, size_t size) -{ - if (nmemb && SIZE_MAX / nmemb < size) { - errno = ENOMEM; - return (NULL); - } - return (_realloc(ptr, nmemb * size, 1)); -} |