diff options
| author | gingerBill <bill@gingerbill.org> | 2022-09-22 01:22:48 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2022-09-22 01:22:48 +0100 |
| commit | eb0d7465e2aa4d6119c9219930f9403951df16f0 (patch) | |
| tree | 6304fb0e0abf16f6a5e641b0633928ed660f8a88 /core/c | |
| parent | 07d798c61a3d19c9b3c4ae66c6fa612a4d9de6bb (diff) | |
Fix `libc.aligned_alloc` for Windows (thanks Microsoft(!))
Diffstat (limited to 'core/c')
| -rw-r--r-- | core/c/libc/stdlib.odin | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/core/c/libc/stdlib.odin b/core/c/libc/stdlib.odin index 68fb4c4dc..d797b8746 100644 --- a/core/c/libc/stdlib.odin +++ b/core/c/libc/stdlib.odin @@ -88,8 +88,6 @@ foreign libc { srand :: proc(seed: uint) --- // 7.22.3 Memory management functions - @(link_name="_aligned_malloc" when ODIN_OS == .Windows else "aligned_alloc") - aligned_alloc :: proc(aligment, size: size_t) -> rawptr --- calloc :: proc(nmemb, size: size_t) -> rawptr --- free :: proc(ptr: rawptr) --- malloc :: proc(size: size_t) -> rawptr --- @@ -128,7 +126,22 @@ foreign libc { } -aligned_free :: proc "c" (ptr: rawptr) { +aligned_alloc :: #force_inline proc "c" (alignment, size: size_t) -> rawptr { + when ODIN_OS == .Windows { + foreign libc { + _aligned_malloc :: proc(size, alignment: size_t) -> rawptr --- + } + return _aligned_malloc(size=size, alignment=alignment) + } else { + foreign libc { + aligned_alloc :: proc(alignment, size: size_t) -> rawptr --- + } + return aligned_alloc(alignment=alignment, size=size) + } +} + + +aligned_free :: #force_inline proc "c" (ptr: rawptr) { when ODIN_OS == .Windows { foreign libc { _aligned_free :: proc(ptr: rawptr) --- |