Mercurial > pub > dyncall > dyncall
comparison dyncall/dyncall_aggregate.c @ 551:eef302b7a58d
- amendment fix for buffer overflow (see commit 0455834d29a1), to also handle non-standard struct packing, + better asserts
- changelog wording tweaks for clarity
- comment tweaks for clarity
- (mostly pointless) microoptimization in aggr alignment calculation, avoiding a modulo, as alignment always a power of 2
- cleanups
author | Tassilo Philipp |
---|---|
date | Mon, 20 Jun 2022 14:57:49 +0200 |
parents | ba70fb631bea |
children | 1539ebfabebb |
comparison
equal
deleted
inserted
replaced
550:5e1002095afa | 551:eef302b7a58d |
---|---|
82 va_start(ap, array_len); | 82 va_start(ap, array_len); |
83 f->sub_aggr = va_arg(ap, const DCaggr*); | 83 f->sub_aggr = va_arg(ap, const DCaggr*); |
84 va_end(ap); | 84 va_end(ap); |
85 | 85 |
86 f->size = f->sub_aggr->size; | 86 f->size = f->sub_aggr->size; |
87 f->alignment = f->sub_aggr->alignment; | 87 f->alignment = f->sub_aggr->alignment; /* field inherit's sub aggrs alignment*/ |
88 break; | 88 break; |
89 } | 89 } |
90 default: | 90 default: |
91 assert(0); | 91 assert(0); |
92 } | 92 } |
93 | 93 |
94 if(type != DC_SIGCHAR_AGGREGATE) | 94 if(type != DC_SIGCHAR_AGGREGATE) |
95 f->alignment = f->size; | 95 f->alignment = f->size; |
96 | 96 |
97 /* aggr's field alignment is relative largest field size */ | 97 /* aggr's field alignment is relative to largest field size */ |
98 if(ag->alignment < f->alignment) | 98 if(ag->alignment < f->alignment) |
99 ag->alignment = f->alignment; | 99 ag->alignment = f->alignment; |
100 } | 100 } |
101 | 101 |
102 | 102 |