bt_hal_cbacks->adapter_state_changed_cb(ev->state);
}
-static void handle_adapter_props_changed(void *buf, uint16_t len)
+static void repack_properties(bt_property_t *send_props,
+ struct hal_property *hal_prop,
+ uint8_t num_props,
+ void *buff_end)
{
- struct hal_ev_adapter_props_changed *ev = buf;
- bt_property_t props[ev->num_props];
- struct hal_property *hal_prop;
- void *p;
- int i;
+ void *p = hal_prop;
+ uint8_t i;
- if (!bt_hal_cbacks->adapter_properties_cb)
- return;
-
- hal_prop = ev->props;
- p = ev->props;
-
- for (i = 0; i < ev->num_props; i++) {
- if (p + sizeof(*hal_prop) + hal_prop->len > buf + len) {
+ for (i = 0; i < num_props; i++) {
+ if (p + sizeof(*hal_prop) + hal_prop->len > buff_end) {
error("invalid adapter properties event, aborting");
exit(EXIT_FAILURE);
}
- props[i].type = hal_prop->type;
- props[i].len = hal_prop->len;
- props[i].val = hal_prop->val;
+ send_props[i].type = hal_prop->type;
+ send_props[i].len = hal_prop->len;
+ send_props[i].val = hal_prop->val;
p += sizeof(*hal_prop) + hal_prop->len;
hal_prop = p;
}
+}
+
+static void handle_adapter_props_changed(void *buf, uint16_t len)
+{
+ struct hal_ev_adapter_props_changed *ev = buf;
+ bt_property_t props[ev->num_props];
+
+ if (!bt_hal_cbacks->adapter_properties_cb)
+ return;
+
+ repack_properties(props, ev->props, ev->num_props, buf + len);
bt_hal_cbacks->adapter_properties_cb(ev->status, ev->num_props, props);
}