1 /** Linux system call interface.
2  * Written by Shaun Jackman <sjackman@gmail.com>.
3  * Copyright 2006 Pathway Connectivity
4  *
5  * Permission to use, copy, modify, and distribute this software
6  * is freely granted, provided that this notice is preserved.
7  */
8 
9 #include <errno.h>
10 #include <stdint.h>
11 
12 extern char _end[];
13 static void *curbrk = _end;
14 
15 extern void *_brk(void *addr);
16 
brk(void * addr)17 int brk(void *addr)
18 {
19 	void *newbrk;
20 	if (curbrk == addr)
21 		return 0;
22 	newbrk = _brk(addr);
23 	curbrk = newbrk;
24 	if (newbrk < addr) {
25 		errno = ENOMEM;
26 		return -1;
27 	}
28 	return 0;
29 }
30 
_sbrk(intptr_t incr)31 void *_sbrk(intptr_t incr)
32 {
33 	void *oldbrk = curbrk;
34 	if (brk(oldbrk + incr) == -1)
35 		return (void *)-1;
36 	return oldbrk;
37 }
38 
39 void *sbrk(intptr_t incr) __attribute__((alias("_sbrk")));
40 
_set_errno(int n)41 int _set_errno(int n)
42 {
43 	if (n < 0) {
44 		errno = -n;
45 		return -1;
46 	}
47 	return n;
48 }
49 
50 #include <sys/wait.h>
51 
52 struct rusage;
53 
54 pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage);
55 
_wait(int * status)56 pid_t _wait(int *status)
57 {
58 	return wait4(-1, status, 0, NULL);
59 }
60 
waitpid(pid_t pid,int * status,int options)61 pid_t waitpid(pid_t pid, int *status, int options)
62 {
63 	return wait4(pid, status, options, NULL);
64 }
65 
66 extern int _reboot(int magic, int magic2, int flag, void *arg);
67 
reboot(int flag)68 int reboot(int flag)
69 {
70 	return _reboot(0xfee1dead, 0x28121969, flag, NULL);
71 }
72