From 2765d8c3f09315766a83acc38a29e7f6a7392128 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Fri, 5 Jul 2013 14:00:08 +0200 Subject: src: expr: data_reg: fix printing data register content Before: ip filter output 41 [ payload load 1b @ network header + 9 => reg 1 ] [ cmp eq reg 1 ] Now: ip filter output 41 [ payload load 1b @ network header + 9 => reg 1 ] [ cmp eq reg 1 0x00000006 ] ^^^^^^^^^^ Signed-off-by: Pablo Neira Ayuso --- src/expr/data_reg.c | 10 ++++------ src/internal.h | 2 ++ 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/expr/data_reg.c b/src/expr/data_reg.c index 316111d..260ae59 100644 --- a/src/expr/data_reg.c +++ b/src/expr/data_reg.c @@ -188,7 +188,7 @@ static int nft_data_reg_value_xml_parse(union nft_data_reg *reg, char *xml) reg->len = tmp; /* Get and set */ - for (i = 0; i < reg->len/sizeof(uint32_t); i++) { + for (i = 0; i < div_round_up(reg->len, sizeof(uint32_t)); i++) { sprintf(node_name, "data%d", i); node = mxmlFindElement(tree, tree, node_name, NULL, @@ -261,7 +261,6 @@ nft_data_reg_value_snprintf_json(char *buf, size_t size, int len = size, offset = 0, ret, i, j; uint32_t utemp; uint8_t *tmp; - int data_len = reg->len/sizeof(uint32_t); ret = snprintf(buf, len, "\"data_reg\": { \"type\" : \"value\", "); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); @@ -269,7 +268,7 @@ nft_data_reg_value_snprintf_json(char *buf, size_t size, ret = snprintf(buf+offset, len, "\"len\" : %zd, ", reg->len); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); - for (i = 0; ilen, sizeof(uint32_t)); i++) { ret = snprintf(buf+offset, len, "\"data%d\" : \"0x", i); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); @@ -298,7 +297,6 @@ int nft_data_reg_value_snprintf_xml(char *buf, size_t size, int len = size, offset = 0, ret, i, j; uint32_t be; uint8_t *tmp; - int data_len = reg->len/sizeof(uint32_t); ret = snprintf(buf, len, ""); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); @@ -306,7 +304,7 @@ int nft_data_reg_value_snprintf_xml(char *buf, size_t size, ret = snprintf(buf+offset, len, "%zd", reg->len); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); - for (i=0; ilen, sizeof(uint32_t)); i++) { ret = snprintf(buf+offset, len, "0x", i); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); @@ -334,7 +332,7 @@ nft_data_reg_value_snprintf_default(char *buf, size_t size, { int len = size, offset = 0, ret, i; - for (i=0; ilen/sizeof(uint32_t); i++) { + for (i = 0; i < div_round_up(reg->len, sizeof(uint32_t)); i++) { ret = snprintf(buf+offset, len, "0x%.8x ", reg->val[i]); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); } diff --git a/src/internal.h b/src/internal.h index ee09661..b6df4dd 100644 --- a/src/internal.h +++ b/src/internal.h @@ -73,4 +73,6 @@ struct nft_set_elem { offset += ret; \ len -= ret; +#define div_round_up(n, d) (((n) + (d) - 1) / (d)) + #endif -- cgit v1.2.3