Skip to content

Commit 3425951

Browse files
authored
Remove dependency on stdalign.h (#16)
1 parent 7f820d0 commit 3425951

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

library.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"maintainer": true
1414
}
1515
],
16-
"version": "7.1.1",
16+
"version": "7.1.2",
1717
"frameworks": "*",
1818
"platforms": "*",
1919
"export": {

src/tiny_stack_allocator.c

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,35 @@
44
*/
55

66
#include <stddef.h>
7-
#include <stdalign.h>
87
#include <stdint.h>
98
#include "tiny_stack_allocator.h"
109
#include "tiny_utils.h"
1110

12-
#define max(a, b) ((a) > (b) ? a : b)
11+
typedef struct {
12+
uint8_t data;
13+
union {
14+
int _int;
15+
long long _long_long;
16+
float _float;
17+
double _double;
18+
long double _long_double;
19+
void* _pointer;
20+
} alignment;
21+
} alignment_t;
22+
23+
enum {
24+
alignment = offsetof(alignment_t, alignment),
25+
};
1326

1427
#define define_worker(_size) \
1528
static void worker_##_size(tiny_stack_allocator_callback_t callback, void* context) \
1629
{ \
17-
max_align_t data[max(_size, sizeof(max_align_t)) / sizeof(max_align_t)]; \
18-
callback(context, data); \
30+
uint8_t data[_size + alignment - 1]; \
31+
uintptr_t offset = alignment - ((uintptr_t)data % alignment); \
32+
if(offset == alignment) { \
33+
offset = 0; \
34+
} \
35+
callback(context, &data[offset]); \
1936
} \
2037
typedef int dummy##_size
2138

0 commit comments

Comments
 (0)