sbrk.c

来自「用于嵌入式Linux系统的标准C的库函数」· C语言 代码 · 共 44 行

C
44
字号
/* sbrk support *//* The current plan is to have one sbrk handler for all cpus.   Hence use `asm' for each global variable here to avoid the cpu prefix.   We can't intrude on the user's namespace (another reason to use asm).  */#include <sys/types.h>#include <sys/syscall.h>#include <errno.h>#include <stddef.h>/* These variables are publicly accessible for debugging purposes.   The user is also free to set sbrk_size to something different.   See mem-layout.c.  */extern int sbrk_size asm ("sbrk_size");caddr_t sbrk_start asm ("sbrk_start");caddr_t sbrk_loc asm ("sbrk_loc");/*caddr_t _sbrk_r (struct _reent *, size_t) asm ("__sbrk_r");*//* FIXME: We need a semaphore here.  */caddr_t_sbrk_r (struct _reent *r, size_t nbytes){  caddr_t result;  if (      /* Ensure we don't underflow.  */      sbrk_loc + nbytes < sbrk_start      /* Ensure we don't overflow.  */      || sbrk_loc + nbytes > sbrk_start + sbrk_size)    {      errno = ENOMEM;      return ((caddr_t) -1);    }  result = sbrk_loc;  sbrk_loc += nbytes;  return result;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?