/** Linux system call interface. * Written by Shaun Jackman . * Copyright 2006 Pathway Connectivity * * Permission to use, copy, modify, and distribute this software * is freely granted, provided that this notice is preserved. */ #include #include extern char _end[]; static void *curbrk = _end; extern void *_brk(void *addr); int brk(void *addr) { void *newbrk; if (curbrk == addr) return 0; newbrk = _brk(addr); curbrk = newbrk; if (newbrk < addr) { errno = ENOMEM; return -1; } return 0; } void *_sbrk(intptr_t incr) { void *oldbrk = curbrk; if (brk(oldbrk + incr) == -1) return (void *)-1; return oldbrk; } void *sbrk(intptr_t incr) __attribute__((alias("_sbrk"))); int _set_errno(int n) { if (n < 0) { errno = -n; return -1; } return n; } #include struct rusage; pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage); pid_t _wait(int *status) { return wait4(-1, status, 0, NULL); } pid_t waitpid(pid_t pid, int *status, int options) { return wait4(pid, status, options, NULL); } extern int _reboot(int magic, int magic2, int flag, void *arg); int reboot(int flag) { return _reboot(0xfee1dead, 0x28121969, flag, NULL); }