diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2024-08-19 21:09:04 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2024-08-21 23:22:47 +0200 |
commit | e35aabd511c44a35394b87625b2a3c8956d2c098 (patch) | |
tree | a0a3b1e7be363ae9a11d77a4885cee562af48396 | |
parent | ffb45bd3f730e4f1bb3348f15abbb0ea87fbb1cb (diff) |
datatype: replace DTYPE_F_ALLOC by bitfield
Only user of the datatype flags field is DTYPE_F_ALLOC, replace it by
bitfield, squash byteorder to 8 bits which is sufficient.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r-- | include/datatype.h | 14 | ||||
-rw-r--r-- | src/datatype.c | 8 |
2 files changed, 7 insertions, 15 deletions
diff --git a/include/datatype.h b/include/datatype.h index 09b84eca..df3bc385 100644 --- a/include/datatype.h +++ b/include/datatype.h @@ -120,15 +120,6 @@ enum byteorder { struct expr; -/** - * enum datatype_flags - * - * @DTYPE_F_ALLOC: datatype is dynamically allocated - */ -enum datatype_flags { - DTYPE_F_ALLOC = (1 << 0), -}; - struct parse_ctx; /** * struct datatype @@ -145,11 +136,12 @@ struct parse_ctx; * @print: function to print a constant of this type * @parse: function to parse a symbol and return an expression * @sym_tbl: symbol table for this type - * @refcnt: reference counter (only for DTYPE_F_ALLOC) + * @refcnt: reference counter (only for dynamically allocated, see .alloc) */ struct datatype { uint32_t type; - enum byteorder byteorder; + enum byteorder byteorder:8; + uint32_t alloc:1; unsigned int flags; unsigned int size; unsigned int subtypes; diff --git a/src/datatype.c b/src/datatype.c index 9293f38e..ea73eaf9 100644 --- a/src/datatype.c +++ b/src/datatype.c @@ -1347,7 +1347,7 @@ static struct datatype *datatype_alloc(void) struct datatype *dtype; dtype = xzalloc(sizeof(*dtype)); - dtype->flags = DTYPE_F_ALLOC; + dtype->alloc = 1; dtype->refcnt = 1; return dtype; @@ -1359,7 +1359,7 @@ const struct datatype *datatype_get(const struct datatype *ptr) if (!dtype) return NULL; - if (!(dtype->flags & DTYPE_F_ALLOC)) + if (!dtype->alloc) return dtype; dtype->refcnt++; @@ -1389,7 +1389,7 @@ struct datatype *datatype_clone(const struct datatype *orig_dtype) *dtype = *orig_dtype; dtype->name = xstrdup(orig_dtype->name); dtype->desc = xstrdup(orig_dtype->desc); - dtype->flags = DTYPE_F_ALLOC | orig_dtype->flags; + dtype->alloc = 1; dtype->refcnt = 1; return dtype; @@ -1401,7 +1401,7 @@ void datatype_free(const struct datatype *ptr) if (!dtype) return; - if (!(dtype->flags & DTYPE_F_ALLOC)) + if (!dtype->alloc) return; assert(dtype->refcnt != 0); |