summaryrefslogtreecommitdiff
path: root/lib/route.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/route.h')
-rw-r--r--lib/route.h13
1 files changed, 5 insertions, 8 deletions
diff --git a/lib/route.h b/lib/route.h
index 48595091..e40a2747 100644
--- a/lib/route.h
+++ b/lib/route.h
@@ -219,10 +219,7 @@ ea_list *ea_normalize(const ea_list *e);
uint ea_list_size(ea_list *);
void ea_list_copy(ea_list *dest, ea_list *src, uint size);
-struct ea_one_attr_list {
- ea_list l;
- eattr a;
-};
+#define EA_LOCAL_LIST(N) struct { ea_list l; eattr a[N]; }
#define EA_LITERAL_EMBEDDED(_id, _type, _flags, _val) ({ \
ASSERT_DIE(_type & EAF_EMBEDDED); \
@@ -245,16 +242,16 @@ struct ea_one_attr_list {
static inline eattr *
ea_set_attr(ea_list **to, eattr a)
{
- struct ea_one_attr_list *ea = tmp_alloc(sizeof(*ea));
- *ea = (struct ea_one_attr_list) {
+ EA_LOCAL_LIST(1) *ea = tmp_alloc(sizeof(*ea));
+ *ea = (typeof(*ea)) {
.l.flags = EALF_SORTED,
.l.count = 1,
.l.next = *to,
- .a = a,
+ .a[0] = a,
};
*to = &ea->l;
- return &ea->a;
+ return &ea->a[0];
}
static inline void