diff options
Diffstat (limited to 'malloc.c')
-rw-r--r-- | malloc.c | 29 |
1 files changed, 13 insertions, 16 deletions
@@ -1,18 +1,14 @@ -/* $Header: malloc.c,v 1.0.1.1 88/01/24 03:53:23 root Exp $ +/* $Header: malloc.c,v 2.0 88/06/05 00:09:16 root Exp $ * * $Log: malloc.c,v $ - * Revision 1.0.1.1 88/01/24 03:53:23 root - * patch 2: made depend on perl.h. - * - * Revision 1.0 87/12/18 13:05:35 root - * Initial revision + * Revision 2.0 88/06/05 00:09:16 root + * Baseline version 2.0. * */ #ifndef lint static char sccsid[] = "@(#)malloc.c 4.3 (Berkeley) 9/16/83"; #endif -#include <stdio.h> #define RCHECK /* @@ -28,8 +24,6 @@ static char sccsid[] = "@(#)malloc.c 4.3 (Berkeley) 9/16/83"; */ #include "EXTERN.h" -#include "handy.h" -#include "search.h" #include "perl.h" /* I don't much care whether these are defined in sys/types.h--LAW */ @@ -38,8 +32,6 @@ static char sccsid[] = "@(#)malloc.c 4.3 (Berkeley) 9/16/83"; #define u_int unsigned int #define u_short unsigned short -#define NULL 0 - /* * The overhead on a block is at least 4 bytes. When free, this space * contains a pointer to the next free block, and the bottom two bits must @@ -66,6 +58,7 @@ union overhead { }; #define MAGIC 0xff /* magic # on accounting info */ +#define OLDMAGIC 0x7f /* same after a free() */ #define RMAGIC 0x55555555 /* magic # on range info */ #ifdef RCHECK #define RSLOP sizeof (u_int) @@ -218,8 +211,12 @@ free(cp) #ifdef debug ASSERT(op->ov_magic == MAGIC); /* make sure it was in use */ #else - if (op->ov_magic != MAGIC) + if (op->ov_magic != MAGIC) { + fprintf(stderr,"%s free() ignored\n", + op->ov_magic == OLDMAGIC ? "Duplicate" : "Bad"); return; /* sanity */ + } + op->ov_magic = OLDMAGIC; #endif #ifdef RCHECK ASSERT(op->ov_rmagic == RMAGIC); @@ -242,11 +239,11 @@ free(cp) * back. We have to search all the free lists for the block in order * to determine its bucket: 1st we make one pass thru the lists * checking only the first block in each; if that fails we search - * ``realloc_srchlen'' blocks in each list for a match (the variable + * ``reall_srchlen'' blocks in each list for a match (the variable * is extern so the caller can modify it). If that fails we just copy * however many bytes was given to realloc() and hope it's not huge. */ -int realloc_srchlen = 4; /* 4 should be plenty, -1 =>'s whole list */ +int reall_srchlen = 4; /* 4 should be plenty, -1 =>'s whole list */ char * realloc(cp, nbytes) @@ -272,13 +269,13 @@ realloc(cp, nbytes) * Search for the old block of memory on the * free list. First, check the most common * case (last element free'd), then (this failing) - * the last ``realloc_srchlen'' items free'd. + * the last ``reall_srchlen'' items free'd. * If all lookups fail, then assume the size of * the memory block being realloc'd is the * smallest possible. */ if ((i = findbucket(op, 1)) < 0 && - (i = findbucket(op, realloc_srchlen)) < 0) + (i = findbucket(op, reall_srchlen)) < 0) i = 0; } onb = (1 << (i + 3)) - sizeof (*op) - RSLOP; |