Browse Source

Fix `libc.aligned_alloc` for Windows (thanks Microsoft(!))

gingerBill 2 years ago
parent
commit
eb0d7465e2
1 changed files with 16 additions and 3 deletions
  1. 16 3
      core/c/libc/stdlib.odin

+ 16 - 3
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) ---