Put the alignment decrement code back into posix_memalign().

Without that code, the function returns a very broken pointer.
This commit is contained in:
Greg King
2021-12-19 20:27:56 -05:00
committed by greg-king5
parent 2235830e31
commit 884f72637b

View File

@@ -75,7 +75,7 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size)
} }
/* Test alignment: is it a power of two? There must be only one bit set. */ /* Test alignment: is it a power of two? There must be only one bit set. */
if (alignment == 0 || (alignment & alignment - 1) != 0) { if (alignment == 0 || (alignment & (alignment - 1)) != 0) {
*memptr = NULL; *memptr = NULL;
return EINVAL; return EINVAL;
} }
@@ -86,7 +86,7 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size)
** overhead added one time; and, the worst thing that might happen is that ** overhead added one time; and, the worst thing that might happen is that
** we cannot free the upper and lower blocks. ** we cannot free the upper and lower blocks.
*/ */
b = malloc (size + alignment); b = malloc (--alignment + size);
/* Handle out-of-memory */ /* Handle out-of-memory */
if (b == NULL) { if (b == NULL) {
@@ -169,6 +169,3 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size)
return EOK; return EOK;
} }