Rev 1357 | Rev 1501 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1357 | Rev 1363 | ||
|---|---|---|---|
| Line 67... | Line 67... | ||
| 67 | { |
67 | { |
| 68 | return __SYSCALL1(SYS_AS_AREA_DESTROY, (sysarg_t ) address); |
68 | return __SYSCALL1(SYS_AS_AREA_DESTROY, (sysarg_t ) address); |
| 69 | } |
69 | } |
| 70 | 70 | ||
| 71 | static size_t heapsize = 0; |
71 | static size_t heapsize = 0; |
| - | 72 | static size_t maxheapsize = (size_t)(-1); |
|
| 72 | /* Start of heap linker symbol */ |
73 | /* Start of heap linker symbol */ |
| 73 | extern char _heap; |
74 | extern char _heap; |
| 74 | 75 | ||
| 75 | /** Sbrk emulation |
76 | /** Sbrk emulation |
| 76 | * |
77 | * |
| Line 89... | Line 90... | ||
| 89 | if (incr > 0 && incr+heapsize < heapsize) |
90 | if (incr > 0 && incr+heapsize < heapsize) |
| 90 | return NULL; |
91 | return NULL; |
| 91 | /* Check for too small values */ |
92 | /* Check for too small values */ |
| 92 | if (incr < 0 && incr+heapsize > heapsize) |
93 | if (incr < 0 && incr+heapsize > heapsize) |
| 93 | return NULL; |
94 | return NULL; |
| - | 95 | /* Check for user limit */ |
|
| - | 96 | if ((maxheapsize!=(size_t)(-1)) && (heapsize + incr)>maxheapsize) return NULL; |
|
| 94 | 97 | ||
| 95 | rc = as_area_resize(&_heap, heapsize + incr,0); |
98 | rc = as_area_resize(&_heap, heapsize + incr,0); |
| 96 | if (rc != 0) |
99 | if (rc != 0) |
| 97 | return NULL; |
100 | return NULL; |
| 98 | 101 | ||
| Line 101... | Line 104... | ||
| 101 | 104 | ||
| 102 | heapsize += incr; |
105 | heapsize += incr; |
| 103 | 106 | ||
| 104 | return res; |
107 | return res; |
| 105 | } |
108 | } |
| - | 109 | ||
| - | 110 | void *set_maxheapsize(size_t mhs) |
|
| - | 111 | { |
|
| - | 112 | maxheapsize=mhs; |
|
| - | 113 | /* Return pointer to area not managed by sbrk */ |
|
| - | 114 | return (void *)&_heap + maxheapsize; |
|
| - | 115 | ||
| - | 116 | } |
|