xref: /plan9-contrib/sys/src/ape/lib/ap/plan9/brk.c (revision 8e5b7f3b5f953bdd8dc9e98ff292dbc9e663ff4d)
13e12c5d1SDavid du Colombier #include "lib.h"
23e12c5d1SDavid du Colombier #include <errno.h>
33e12c5d1SDavid du Colombier #include "sys9.h"
43e12c5d1SDavid du Colombier 
53e12c5d1SDavid du Colombier char	end[];
63e12c5d1SDavid du Colombier static	char	*bloc = { end };
73e12c5d1SDavid du Colombier extern	int	_BRK_(void*);
83e12c5d1SDavid du Colombier 
93e12c5d1SDavid du Colombier char *
brk(char * p)103e12c5d1SDavid du Colombier brk(char *p)
113e12c5d1SDavid du Colombier {
123e12c5d1SDavid du Colombier 	unsigned long n;
133e12c5d1SDavid du Colombier 
143e12c5d1SDavid du Colombier 	n = (unsigned long)p;
153e12c5d1SDavid du Colombier 	n += 3;
163e12c5d1SDavid du Colombier 	n &= ~3;
173e12c5d1SDavid du Colombier 	if(_BRK_((void*)n) < 0){
183e12c5d1SDavid du Colombier 		errno = ENOMEM;
193e12c5d1SDavid du Colombier 		return (char *)-1;
203e12c5d1SDavid du Colombier 	}
213e12c5d1SDavid du Colombier 	bloc = (char *)n;
223e12c5d1SDavid du Colombier 	return 0;
233e12c5d1SDavid du Colombier }
243e12c5d1SDavid du Colombier 
25*8e5b7f3bSDavid du Colombier void *
sbrk(unsigned long n)26*8e5b7f3bSDavid du Colombier sbrk(unsigned long n)
273e12c5d1SDavid du Colombier {
283e12c5d1SDavid du Colombier 	n += 3;
293e12c5d1SDavid du Colombier 	n &= ~3;
303e12c5d1SDavid du Colombier 	if(_BRK_((void *)(bloc+n)) < 0){
313e12c5d1SDavid du Colombier 		errno = ENOMEM;
32*8e5b7f3bSDavid du Colombier 		return (void *)-1;
333e12c5d1SDavid du Colombier 	}
343e12c5d1SDavid du Colombier 	bloc += n;
35*8e5b7f3bSDavid du Colombier 	return (void *)(bloc-n);
363e12c5d1SDavid du Colombier }
37