summaryrefslogtreecommitdiff
path: root/shared-module/_bleio/ScanEntry.c
diff options
context:
space:
mode:
authorDavePutz <dwputz@gmail.com>2020-06-16 15:12:15 -0500
committerGitHub <noreply@github.com>2020-06-16 15:12:15 -0500
commit73ce75c3f825d911d11dfe63a27193ec9176dc86 (patch)
tree081af89a953440f7b10624135a1cc7c17170e3e2 /shared-module/_bleio/ScanEntry.c
parent6fd24725b810050521ecef6a02c58833e9da2f1e (diff)
parent0e3cad04b793923cd5f26d7136b6d0580a60e0dd (diff)
Merge pull request #9 from adafruit/main
update from adafruit
Diffstat (limited to 'shared-module/_bleio/ScanEntry.c')
-rw-r--r--shared-module/_bleio/ScanEntry.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/shared-module/_bleio/ScanEntry.c b/shared-module/_bleio/ScanEntry.c
index 785209c4a..af9e4b347 100644
--- a/shared-module/_bleio/ScanEntry.c
+++ b/shared-module/_bleio/ScanEntry.c
@@ -56,11 +56,16 @@ bool bleio_scanentry_data_matches(const uint8_t* data, size_t len, const uint8_t
if (prefixes_length == 0) {
return true;
}
+ if (len == 0) {
+ // Prefixes exist, but no data.
+ return false;
+ }
size_t i = 0;
while(i < prefixes_length) {
uint8_t prefix_length = prefixes[i];
i += 1;
size_t j = 0;
+ bool prefix_matched = false;
while (j < len) {
uint8_t structure_length = data[j];
j += 1;
@@ -71,13 +76,18 @@ bool bleio_scanentry_data_matches(const uint8_t* data, size_t len, const uint8_t
if (any) {
return true;
}
- } else if (!any) {
- return false;
+ prefix_matched = true;
+ break;
}
j += structure_length;
}
+ // If all (!any), the current prefix must have matched at least one field.
+ if (!prefix_matched && !any) {
+ return false;
+ }
i += prefix_length;
}
+ // All prefixes matched some field (if !any), or none did (if any).
return !any;
}