From eb0d7465e2aa4d6119c9219930f9403951df16f0 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 22 Sep 2022 01:22:48 +0100 Subject: [PATCH] Fix `libc.aligned_alloc` for Windows (thanks Microsoft(!)) --- core/c/libc/stdlib.odin | 19 ++++++++++++++++--- 1 file 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) ---