summaryrefslogtreecommitdiff
path: root/malloc.c
diff options
context:
space:
mode:
authorLarry Wall <larry@wall.org>1988-06-05 00:00:00 +0000
committerLarry Wall <larry@wall.org>1988-06-05 00:00:00 +0000
commit378cc40b38293ffc7298c6a7ed3cd740ad79be52 (patch)
tree87bedf9adc5c88847a2e2d85963df5f94435aaf5 /malloc.c
parenta4de7c03d0bdc29d9d3a18abad4ac2628182ed7b (diff)
downloadperl-378cc40b38293ffc7298c6a7ed3cd740ad79be52.tar.gz
perl 2.0 (no announcement message available)perl-2.0
Some of the enhancements from Perl1 included: * New regexp routines derived from Henry Spencer's. o Support for /(foo|bar)/. o Support for /(foo)*/ and /(foo)+/. o \s for whitespace, \S for non-, \d for digit, \D nondigit * Local variables in blocks, subroutines and evals. * Recursive subroutine calls are now supported. * Array values may now be interpolated into lists: unlink 'foo', 'bar', @trashcan, 'tmp'; * File globbing. * Use of <> in array contexts returns the whole file or glob list. * New iterator for normal arrays, foreach, that allows both read and write. * Ability to open pipe to a forked off script for secure pipes in setuid scripts. * File inclusion via do 'foo.pl'; * More file tests, including -t to see if, for instance, stdin is a terminal. File tests now behave in a more correct manner. You can do file tests on filehandles as well as filenames. The special filetests -T and -B test a file to see if it's text or binary. * An eof can now be used on each file of the <> input for such purposes as resetting the line numbers or appending to each file of an inplace edit. * Assignments can now function as lvalues, so you can say things like ($HOST = $host) =~ tr/a-z/A-Z/; ($obj = $src) =~ s/\.c$/.o/; * You can now do certain file operations with a variable which holds the name of a filehandle, e.g. open(++$incl,$includefilename); $foo = <$incl>; * Warnings are now available (with -w) on use of uninitialized variables and on identifiers that are mentioned only once, and on reference to various undefined things. * There is now a wait operator. * There is now a sort operator. * The manual is now not lying when it says that perl is generally faster than sed. I hope.
Diffstat (limited to 'malloc.c')
-rw-r--r--malloc.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/malloc.c b/malloc.c
index 6a6ceea549..78306211d4 100644
--- a/malloc.c
+++ b/malloc.c
@@ -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;