summaryrefslogtreecommitdiff
path: root/lib/route.h
diff options
context:
space:
mode:
authorMaria Matejka <mq@ucw.cz>2022-04-14 18:32:19 +0200
committerMaria Matejka <mq@ucw.cz>2022-05-04 15:38:40 +0200
commitcf07d8ad79273a3bbf0617c17e438602e4b64ece (patch)
treef747ced6c101d48032e1f0185d0340b5fb3d69f3 /lib/route.h
parent1d309c4ce6e95b68c64a8f007f6dd2f1830a5707 (diff)
Replaced boilerplate eattr allocation by ea_set_attr()
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 ba7bab61..ad3f3fb7 100644
--- a/lib/route.h
+++ b/lib/route.h
@@ -217,10 +217,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); \
@@ -243,16 +240,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