summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2021-03-10 11:45:47 +0100
committerPhil Sutter <phil@nwl.cc>2021-11-30 14:57:46 +0100
commit4e1abfc552170d6db5c511634a29918e64c1b51b (patch)
treec33900e470e6461ea300c99948255d47b7ef852e /src
parent94e4e77d4343dff02ecd6079f7de34279510a5d9 (diff)
meta: Fix hour_type size
In kernel as well as when parsing, hour_type is assumed to be 32bits. Having the struct datatype field set to 64bits breaks Big Endian and so does passing a 64bit value and 32 as length to constant_expr_alloc() as it makes it import the upper 32bits. Fix this by turning 'result' into a uint32_t and introduce a temporary uint64_t just for the call to time_parse() which expects that. Fixes: f8f32deda31df ("meta: Introduce new conditions 'time', 'day' and 'hour'") Signed-off-by: Phil Sutter <phil@nwl.cc>
Diffstat (limited to 'src')
-rw-r--r--src/meta.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/meta.c b/src/meta.c
index 1794495e..23b1fd27 100644
--- a/src/meta.c
+++ b/src/meta.c
@@ -516,7 +516,8 @@ static struct error_record *hour_type_parse(struct parse_ctx *ctx,
{
struct error_record *er;
struct tm tm, *cur_tm;
- uint64_t result = 0;
+ uint32_t result;
+ uint64_t tmp;
char *endptr;
time_t ts;
@@ -544,8 +545,8 @@ static struct error_record *hour_type_parse(struct parse_ctx *ctx,
if (endptr && *endptr)
return error(&sym->location, "Can't parse trailing input: \"%s\"\n", endptr);
- if ((er = time_parse(&sym->location, sym->identifier, &result)) == NULL) {
- result /= 1000;
+ if ((er = time_parse(&sym->location, sym->identifier, &tmp)) == NULL) {
+ result = tmp / 1000;
goto convert;
}
@@ -599,7 +600,7 @@ const struct datatype hour_type = {
.name = "hour",
.desc = "Hour of day of packet reception",
.byteorder = BYTEORDER_HOST_ENDIAN,
- .size = sizeof(uint64_t) * BITS_PER_BYTE,
+ .size = sizeof(uint32_t) * BITS_PER_BYTE,
.basetype = &integer_type,
.print = hour_type_print,
.parse = hour_type_parse,