[PATCH nft 2/2] datatype: replace DTYPE_F_ALLOC by bitfield

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxx>
---
 include/datatype.h | 14 +++-----------
 src/datatype.c     |  8 ++++----
 2 files changed, 7 insertions(+), 15 deletions(-)

diff --git a/include/datatype.h b/include/datatype.h
index 09b84eca27a7..df3bc3850b51 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 9293f38ed713..ea73eaf9a691 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);
-- 
2.30.2





[Index of Archives]     [Netfitler Users]     [Berkeley Packet Filter]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux