From cacfa7e3a408583614d029a532858367fff1ddac Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Wed, 18 Jan 2012 01:18:16 +0200 Subject: [PATCH] eir: Add eir_length() function --- src/eir.c | 23 +++++++++++++++++++++++ src/eir.h | 1 + 2 files changed, 24 insertions(+) diff --git a/src/eir.c b/src/eir.c index 913a038d1..419f4445b 100644 --- a/src/eir.c +++ b/src/eir.c @@ -369,3 +369,26 @@ size_t eir_append_data(uint8_t *eir, size_t eir_len, uint8_t type, return eir_len; } + +size_t eir_length(uint8_t *eir, size_t maxlen) +{ + uint8_t field_len; + size_t parsed, length; + + for (parsed = 0, length = 0; parsed < maxlen - 1; parsed += field_len) { + field_len = eir[0]; + + if (field_len == 0) + break; + + parsed += field_len + 1; + + if (parsed > maxlen) + break; + + length = parsed; + eir += field_len + 1; + } + + return length; +} diff --git a/src/eir.h b/src/eir.h index 5d70f4d10..13311ef5e 100644 --- a/src/eir.h +++ b/src/eir.h @@ -58,3 +58,4 @@ gboolean eir_has_data_type(uint8_t *data, size_t len, uint8_t type); size_t eir_append_data(uint8_t *eir, size_t eir_len, uint8_t type, uint8_t *data, size_t data_len); +size_t eir_length(uint8_t *eir, size_t maxlen); -- 2.47.3