xref: /plan9-contrib/sys/src/ape/lib/ap/riscv64/brk.c (revision ce95e1b3727b9cb1c223ffbed69aff21a8ced255)
1 #include "../plan9/lib.h"
2 #include <errno.h>
3 #include "../plan9/sys9.h"
4 
5 char	end[];
6 static	char	*bloc = { end };
7 extern	int	_BRK_(void*);
8 
9 char *
brk(char * p)10 brk(char *p)
11 {
12 	unsigned long n;
13 
14 	n = (unsigned long)p;
15 	n += 7;
16 	n &= ~7;
17 	if(_BRK_((void*)n) < 0){
18 		errno = ENOMEM;
19 		return (char *)-1;
20 	}
21 	bloc = (char *)n;
22 	return 0;
23 }
24 
25 void *
sbrk(unsigned long n)26 sbrk(unsigned long n)
27 {
28 	n += 7;
29 	n &= ~7;
30 	_WRITE(2, "", 0);
31 	if(_BRK_((void *)(bloc+n)) < 0){
32 		errno = ENOMEM;
33 		return (void *)-1;
34 	}
35 	bloc += n;
36 	return (void *)(bloc-n);
37 }
38