aboutsummaryrefslogtreecommitdiff
path: root/core/c
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-09-22 01:22:48 +0100
committergingerBill <bill@gingerbill.org>2022-09-22 01:22:48 +0100
commiteb0d7465e2aa4d6119c9219930f9403951df16f0 (patch)
tree6304fb0e0abf16f6a5e641b0633928ed660f8a88 /core/c
parent07d798c61a3d19c9b3c4ae66c6fa612a4d9de6bb (diff)
Fix `libc.aligned_alloc` for Windows (thanks Microsoft(!))
Diffstat (limited to 'core/c')
-rw-r--r--core/c/libc/stdlib.odin19
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) ---