67 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* $Header$ */
 | |
| /*	S T R U C T U R E - S T O R A G E  M A N A G E M E N T		*/
 | |
| 
 | |
| /*	Assume that each structure contains a field "next", of pointer
 | |
| 	type, as first tagfield.
 | |
| 	struct xxx serves as a general structure: it just declares the
 | |
| 	tagfield "next" as first field of a structure.
 | |
| 	Please don't worry about any warnings when compiling this file
 | |
| 	because some dirty tricks are performed to obtain the necessary
 | |
| 	actions.
 | |
| */
 | |
| 
 | |
| #include	"debug.h"	/* UF */
 | |
| #include	"botch_free.h"	/* UF */
 | |
| #include	"assert.h"
 | |
| #include	"alloc.h"
 | |
| #include	"storage.h"
 | |
| 
 | |
| struct xxx	{
 | |
| 	char *next;
 | |
| };
 | |
| 
 | |
| char *
 | |
| head_alloc(phead, size)
 | |
| 	char **phead;
 | |
| 	int size;
 | |
| {
 | |
| 	struct xxx *tmp;
 | |
| 
 | |
| 	if (*phead == 0)	{
 | |
| 		return Malloc(size);
 | |
| 	}
 | |
| 	tmp = (struct xxx *) (*phead);
 | |
| 	*phead = (char *) tmp->next;
 | |
| 	return (char *) tmp;
 | |
| }
 | |
| 
 | |
| /* instead of Calloc:	*/
 | |
| clear(ptr, n)
 | |
| 	char *ptr;
 | |
| 	int n;
 | |
| {
 | |
| 	ASSERT((long)ptr % sizeof (long) == 0);
 | |
| 	while (n >= sizeof (long))	{	/* high-speed clear loop */
 | |
| 		*(long *)ptr = 0L;
 | |
| 		ptr += sizeof (long), n -= sizeof (long);
 | |
| 	}
 | |
| 	while (n--)
 | |
| 		*ptr++ = '\0';
 | |
| }
 | |
| 
 | |
| #ifdef	BOTCH_FREE
 | |
| botch(ptr, n)
 | |
| 	char *ptr;
 | |
| 	int n;
 | |
| {	/*	Writes garbage over n chars starting from ptr.
 | |
| 		Used to check if freed memory is used inappropriately.
 | |
| 	*/
 | |
| 	ASSERT((long)ptr % sizeof (long) == 0);
 | |
| 	while (n >= sizeof (long))	{	/* high-speed botch loop */
 | |
| 		*(long *)ptr = 025252525252L;
 | |
| 		ptr += sizeof (long), n -= sizeof (long);
 | |
| 	}
 | |
| 	while (n--)
 | |
| 		*ptr++ = '\252';
 | |
| }
 | |
| #endif	BOTCH_FREE
 |