OSDN Git Service

eir: Fix incorrect eir_length() parsing
authorSyam Sidhardhan <s.syam@samsung.com>
Mon, 16 Apr 2012 13:01:37 +0000 (18:31 +0530)
committerJohan Hedberg <johan.hedberg@intel.com>
Mon, 16 Apr 2012 19:55:42 +0000 (22:55 +0300)
Issue:
The COD value displayed via dbus during inquiry is wrong.
This is because of the incorrect return length of the eir_length(),
which leads to appending the COD at wrong location.

Analysis:
After appending the COD at the end of the eir data, we can see
there are some '00' present in the eir field length in the eir file.
XX:XX:XX:XX:XX:XX 07095359414D5043020A040B0312111F110C110E110311
0000000000000000000000040D000142

Fix:
Corrected the length calculation in eir_length(), which is determining,
which position the COD should append

src/eir.c

index 492af0d..3b2db9e 100644 (file)
--- a/src/eir.c
+++ b/src/eir.c
@@ -378,9 +378,9 @@ size_t eir_append_data(uint8_t *eir, size_t eir_len, uint8_t type,
 size_t eir_length(uint8_t *eir, size_t maxlen)
 {
        uint8_t field_len;
-       size_t parsed, length;
+       size_t parsed = 0, length = 0;
 
-       for (parsed = 0, length = 0; parsed < maxlen - 1; parsed += field_len) {
+       while (parsed < maxlen - 1) {
                field_len = eir[0];
 
                if (field_len == 0)