From 76419383a818213ffbd72d08a53ab70716122f8b Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 8 Sep 2021 14:45:53 +0100 Subject: [PATCH] Add some minor sanity checks to the compiler's `heap_allocator_proc` on Darwin --- src/common_memory.cpp | 23 +++++++++++++++-------- src/gb/gb.h | 12 ++++++++---- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/common_memory.cpp b/src/common_memory.cpp index 418470c19..7b4c03a41 100644 --- a/src/common_memory.cpp +++ b/src/common_memory.cpp @@ -379,10 +379,10 @@ GB_ALLOCATOR_PROC(heap_allocator_proc) { break; #else // TODO(bill): *nix version that's decent - case gbAllocation_Alloc: - posix_memalign(&ptr, alignment, size); + case gbAllocation_Alloc: { + int err = posix_memalign(&ptr, alignment, size); gb_zero_size(ptr, size); - break; + } break; case gbAllocation_Free: if (old_memory != nullptr) { @@ -390,13 +390,16 @@ GB_ALLOCATOR_PROC(heap_allocator_proc) { } break; - case gbAllocation_Resize: + case gbAllocation_Resize: { + int err = 0; if (size == 0) { free(old_memory); break; } if (old_memory == nullptr) { - posix_memalign(&ptr, alignment, size); + err = posix_memalign(&ptr, alignment, size); + GB_ASSERT_MSG(err == 0, "posix_memalign err: %d", err); + GB_ASSERT(ptr != nullptr); gb_zero_size(ptr, size); break; } @@ -405,10 +408,14 @@ GB_ALLOCATOR_PROC(heap_allocator_proc) { break; } - posix_memalign(&ptr, alignment, size); + err = posix_memalign(&ptr, alignment, size); + GB_ASSERT_MSG(err == 0, "posix_memalign err: %d", err); + GB_ASSERT(ptr != nullptr); gb_memmove(ptr, old_memory, old_size); - gb_zero_size(cast(u8 *)ptr + old_size, gb_max(size-old_size, 0)); - break; + free(old_memory); + isize n = gb_max(size-old_size, 0); + gb_zero_size(cast(u8 *)ptr + old_size, n); + } break; #endif case gbAllocation_FreeAll: diff --git a/src/gb/gb.h b/src/gb/gb.h index 5ee32da64..70e4d0ab0 100644 --- a/src/gb/gb.h +++ b/src/gb/gb.h @@ -3123,18 +3123,22 @@ gb_inline void *gb_memset(void *dest, u8 c, isize n) { return NULL; } - if (n == 0) + if (n <= 0) { return dest; + } s[0] = s[n-1] = c; - if (n < 3) + if (n < 3) { return dest; + } s[1] = s[n-2] = c; s[2] = s[n-3] = c; - if (n < 7) + if (n < 7) { return dest; + } s[3] = s[n-4] = c; - if (n < 9) + if (n < 9) { return dest; + } k = -cast(intptr)s & 3; s += k;