- * _sbrk_grow_aligned() aligns the old break to a low_align boundry,
- * adds min_size, aligns to a high_align boundry, and calls _brk_unlocked()
- * to set the new break. The low_aligned-aligned value is returned, and
- * the actual space allocated is returned through actual_size.
- *
- * Unlike sbrk(2), _sbrk_grow_aligned takes an unsigned size, and does
- * not allow shrinking the heap.
- */
-void *
-_sbrk_grow_aligned(size_t min_size, size_t low_align, size_t high_align,
- size_t *actual_size)
-{
- uintptr_t old_brk;
- uintptr_t ret_brk;
- uintptr_t high_brk;
- uintptr_t new_brk;
- int brk_result;
-
-#define ALIGNSZ 16
-#define BRKALIGN(x) (caddr_t)P2ROUNDUP((uintptr_t)(x), ALIGNSZ)
-
- if ((low_align & (low_align - 1)) != 0 ||
- (high_align & (high_align - 1)) != 0) {
- errno = EINVAL;
- return ((void *)-1);
- }
- low_align = MAX(low_align, ALIGNSZ);
- high_align = MAX(high_align, ALIGNSZ);
-
- old_brk = (uintptr_t)BRKALIGN(sbrk(0));
- ret_brk = P2ROUNDUP(old_brk, low_align);
- high_brk = ret_brk + min_size;
- new_brk = P2ROUNDUP(high_brk, high_align);
-
- /*
- * Check for overflow
- */
- if (ret_brk < old_brk || high_brk < ret_brk || new_brk < high_brk) {
- errno = ENOMEM;
- return ((void *)-1);
- }
-
- brk_result = brk((void *)new_brk);
-
- if (brk_result != 0)
- return ((void *)-1);
-
- if (actual_size != NULL)
- *actual_size = (new_brk - ret_brk);
- return ((void *)ret_brk);
-}
-
-/*