PWB1/sys/source/s4/realloc.c

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

#
/*	realloc(p,bytes) reallocates a block obtained from malloc()
 *	to have a new size nbytes
 *	returns new location, or -1 on failure
*/
#define BYTESPERPTR 2
#define NULL 0
struct { char *ptr; };

char *alloc();
char *allocx;

char *realloc(p,nbytes)
register char *p;
unsigned nbytes;
{
	register char *q;
	char *s, *t;
	register unsigned nb;
	nb = (p-BYTESPERPTR)->ptr - p;
	nbytes = (nbytes+BYTESPERPTR-1) & ~(BYTESPERPTR-1);
	q = malloc(nbytes);
	if(q==NULL || q==p)
		return(q);
	s = p;
	t = q;
	if(nbytes<nb)
		nb = nbytes;
	while(nb--!=0)
		*t++ = *s++;
	if(q<p && q+nbytes>p)
		(q+(q+nbytes-p))->ptr = allocx;
	return(q);
}