Rev 1250 | Rev 1330 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1250 | Rev 1307 | ||
|---|---|---|---|
| Line 49... | Line 49... | ||
| 49 | * |
49 | * |
| 50 | * @param address Virtual address pointing into already existing address space area. |
50 | * @param address Virtual address pointing into already existing address space area. |
| 51 | * @param size New requested size of the area. |
51 | * @param size New requested size of the area. |
| 52 | * @param flags Currently unused. |
52 | * @param flags Currently unused. |
| 53 | * |
53 | * |
| 54 | * @return address on success, (void *) -1 otherwise. |
54 | * @return Zero on success or a code from @ref errno.h on failure. |
| 55 | */ |
55 | */ |
| 56 | void *as_area_resize(void *address, size_t size, int flags) |
56 | int as_area_resize(void *address, size_t size, int flags) |
| 57 | { |
57 | { |
| 58 | return (void *) __SYSCALL3(SYS_AS_AREA_RESIZE, (sysarg_t ) address, (sysarg_t) size, (sysarg_t) flags); |
58 | return __SYSCALL3(SYS_AS_AREA_RESIZE, (sysarg_t ) address, (sysarg_t) size, (sysarg_t) flags); |
| - | 59 | } |
|
| - | 60 | ||
| - | 61 | /** Destroy address space area. |
|
| - | 62 | * |
|
| - | 63 | * @param address Virtual address pointing into the address space area being destroyed. |
|
| - | 64 | * |
|
| - | 65 | * @return Zero on success or a code from @ref errno.h on failure. |
|
| - | 66 | */ |
|
| - | 67 | int as_area_destroy(void *address) |
|
| - | 68 | { |
|
| - | 69 | return __SYSCALL1(SYS_AS_AREA_DESTROY, (sysarg_t ) address); |
|
| 59 | } |
70 | } |
| 60 | 71 | ||
| 61 | /** Prepare to accept address space area. |
72 | /** Prepare to accept address space area. |
| 62 | * |
73 | * |
| 63 | * @param id Task ID of the donor task. |
74 | * @param id Task ID of the donor task. |
| Line 108... | Line 119... | ||
| 108 | if it should be shrinked |
119 | if it should be shrinked |
| 109 | * @return Pointer to newly allocated area |
120 | * @return Pointer to newly allocated area |
| 110 | */ |
121 | */ |
| 111 | void *sbrk(ssize_t incr) |
122 | void *sbrk(ssize_t incr) |
| 112 | { |
123 | { |
| - | 124 | int rc; |
|
| 113 | void *res; |
125 | void *res; |
| 114 | /* Check for invalid values */ |
126 | /* Check for invalid values */ |
| 115 | if (incr < 0 && -incr > heapsize) |
127 | if (incr < 0 && -incr > heapsize) |
| 116 | return NULL; |
128 | return NULL; |
| 117 | /* Check for too large value */ |
129 | /* Check for too large value */ |
| Line 119... | Line 131... | ||
| 119 | return NULL; |
131 | return NULL; |
| 120 | /* Check for too small values */ |
132 | /* Check for too small values */ |
| 121 | if (incr < 0 && incr+heapsize > heapsize) |
133 | if (incr < 0 && incr+heapsize > heapsize) |
| 122 | return NULL; |
134 | return NULL; |
| 123 | 135 | ||
| 124 | res = as_area_resize(&_heap, heapsize + incr,0); |
136 | rc = as_area_resize(&_heap, heapsize + incr,0); |
| 125 | if (!res) |
137 | if (rc != 0) |
| 126 | return NULL; |
138 | return NULL; |
| 127 | 139 | ||
| 128 | /* Compute start of new area */ |
140 | /* Compute start of new area */ |
| 129 | res = (void *)&_heap + heapsize; |
141 | res = (void *)&_heap + heapsize; |
| 130 | 142 | ||