Diff between 4b98e3cfcb03790c9c452990b054868782b9481d and cacfa7e3a408583614d029a532858367fff1ddac

Changed Files

File Additions Deletions Status
src/eir.c +23 -0 modified
src/eir.h +1 -0 modified

Full Patch

diff --git a/src/eir.c b/src/eir.c
index 913a038..419f444 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 5d70f4d..13311ef 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);