From f720fda657dce77ca279655af68acb04453ea2cf Mon Sep 17 00:00:00 2001 From: Ryan Hartlage Date: Tue, 8 Apr 2025 22:22:51 -0400 Subject: [PATCH] Remove dependency on stdalign.h --- library.json | 2 +- src/tiny_stack_allocator.c | 25 +++++++++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/library.json b/library.json index 49cfad1..5322215 100644 --- a/library.json +++ b/library.json @@ -13,7 +13,7 @@ "maintainer": true } ], - "version": "7.1.1", + "version": "7.1.2", "frameworks": "*", "platforms": "*", "export": { diff --git a/src/tiny_stack_allocator.c b/src/tiny_stack_allocator.c index 70836ec..59864a0 100644 --- a/src/tiny_stack_allocator.c +++ b/src/tiny_stack_allocator.c @@ -4,18 +4,35 @@ */ #include -#include #include #include "tiny_stack_allocator.h" #include "tiny_utils.h" -#define max(a, b) ((a) > (b) ? a : b) +typedef struct { + uint8_t data; + union { + int _int; + long long _long_long; + float _float; + double _double; + long double _long_double; + void* _pointer; + } alignment; +} alignment_t; + +enum { + alignment = offsetof(alignment_t, alignment), +}; #define define_worker(_size) \ static void worker_##_size(tiny_stack_allocator_callback_t callback, void* context) \ { \ - max_align_t data[max(_size, sizeof(max_align_t)) / sizeof(max_align_t)]; \ - callback(context, data); \ + uint8_t data[_size + alignment - 1]; \ + uintptr_t offset = alignment - ((uintptr_t)data % alignment); \ + if(offset == alignment) { \ + offset = 0; \ + } \ + callback(context, &data[offset]); \ } \ typedef int dummy##_size