3BSD/usr/src/cmd/apl/aq.c

Compare this file to the similar file:
Show the results in this format:

#
/*
 * C library -- alloc/free
 */

#define	logical	int

struct fb {
	logical	size;
	char	*next;
};

int	freelist[] = {
	0,
	-1,
};
logical	slop	= 2;

alloc(asize)
logical asize;
{ return ( calloc ( 1 , asize ) ); }  
/*{
	register logical size;
	register logical np;
	register logical cp;

	if ((size = asize) == 0)
		return(0);
	size += 3;
	size &= ~01;
	for (;;) {
		cp = freelist;
		while ((np = cp->next) != -1) {
			if (np->size>=size) {
				if (size+slop >= np->size) {
					cp->next = np->next;
					return(&np->next);
				}
				cp = cp->next = np+size;
				cp->size = np->size - size;
				cp->next = np->next;
				np->size = size;
				return(&np->next);
			}
			cp = np;
		}
		return ( calloc ( 1 , asize ) ); 

		/* asize = size<1024? 1024: size;
		if ((cp = sbrk(asize)) == -1) {
			error("workspace exceeded");

		}
		cp->size = asize;
		free(&cp->next); 
	}
}  */


afree(aptr)
char *aptr;
{if ( aptr == 0 ) return;
cfree ( aptr ); }  
/* {
	register logical ptr;
	register logical cp;
	register logical np;

	if (aptr == 0) return;
	ptr = aptr-4;
	cp = freelist;
	while ((np = cp->next) < ptr)
		cp = np;
	if (ptr+ptr->size == np) {
		ptr->size += np->size;
		ptr->next = np->next;
		np = ptr;
	} else
		ptr->next = np;
	if (cp+cp->size == ptr) {
		cp->size += ptr->size;
		cp->next = ptr->next;
	} else
		cp->next = ptr;
} */