/* * This file is part of the UCB release of Plan 9. It is subject to the license * terms in the LICENSE file found in the top-level directory of this * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No * part of the UCB release of Plan 9, including this file, may be copied, * modified, propagated, or distributed except according to the terms contained * in the LICENSE file. */ #include #include extern char end[]; static char *bloc = { end }; enum { Round = 7 }; #define brk_(p) ((uintptr_t)~create("#0/brk", -1, p)) int brk(void *p) { uintptr_t bl; bl = ((uintptr_t)p + Round) & ~Round; if(brk_(bl) < 0) return -1; bloc = (char*)bl; return 0; } void* sbrk(uint32_t n) { uintptr_t bl; bl = ((uintptr_t)bloc + Round) & ~Round; if(brk_(bl+n) < 0) return (void*)-1; bloc = (char*)bl + n; return (void*)bl; }