summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2024-08-19 21:09:04 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2024-08-21 23:22:47 +0200
commite35aabd511c44a35394b87625b2a3c8956d2c098 (patch)
treea0a3b1e7be363ae9a11d77a4885cee562af48396
parentffb45bd3f730e4f1bb3348f15abbb0ea87fbb1cb (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.h14
-rw-r--r--src/datatype.c8
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);