From 5a4486abfe37c0969b888d2c6fc37b0c7e1eaafb Mon Sep 17 00:00:00 2001 From: mrb0nk500 Date: Tue, 9 Aug 2022 11:17:19 -0300 Subject: rt_struct: Create an offset table if none was supplied in `create_rts()` --- rt_struct.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/rt_struct.c b/rt_struct.c index 4117def..b4840ac 100644 --- a/rt_struct.c +++ b/rt_struct.c @@ -26,6 +26,16 @@ static size_t member_size(rts_member *member) { return size; } +static int member_count(rts_type *type) { + if (type == NULL || type->members == NULL) { + return -1; + } else { + int i; + for (i = 0; type->members[i] != NULL; ++i); + return i; + } +} + int create_rts(rts_type *type) { if (type == NULL) { return 1; @@ -42,8 +52,14 @@ int create_rts(rts_type *type) { size_t max_align = 0; size_t remainder = 0; size_t padding = 0; + const int num_members = member_count(type); rts_member **members = type->members; + if (type->offsets == NULL) { + type->offsets = calloc(num_members+1, sizeof(size_t)); + type->offsets[num_members] = -1; + } + for (int i = 0; members[i] != NULL; ++i) { if (create_rts(members[i]->type)) { return 1; -- cgit v1.2.3-13-gbd6f