summaryrefslogtreecommitdiff
path: root/android/hal-handsfree.c
diff options
context:
space:
mode:
authorSzymon Janc <szymon.janc@tieto.com>2014-03-09 23:25:28 +0100
committerSzymon Janc <szymon.janc@tieto.com>2014-03-10 12:32:13 +0100
commit59ccaef03ca7a1b889f6d3784ca06c41e34b1857 (patch)
treee2fd4e7f666ef57408d4470ee8a228236f7b0368 /android/hal-handsfree.c
parent42aeb1a8ecb71c7719035fde027cdda307a1d12f (diff)
downloadbluez-59ccaef03ca7a1b889f6d3784ca06c41e34b1857.tar.gz
android/handsfree: Pass strings as NULL terminated arrays in IPC
If type in HAL IPC is defined as string pass it as NULL terminated array. This will allow to avoid extra copy when passing strings.
Diffstat (limited to 'android/hal-handsfree.c')
-rw-r--r--android/hal-handsfree.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/android/hal-handsfree.c b/android/hal-handsfree.c
index 4117ed0a9..5f484fe07 100644
--- a/android/hal-handsfree.c
+++ b/android/hal-handsfree.c
@@ -83,8 +83,10 @@ static void handle_volume(void *buf, uint16_t len)
static void handle_dial(void *buf, uint16_t len)
{
struct hal_ev_handsfree_dial *ev = buf;
+ uint16_t num_len = ev->number_len;
- if (len != sizeof(*ev) + ev->number_len) {
+ if (len != sizeof(*ev) + num_len ||
+ (num_len != 0 && ev->number[num_len - 1] != '\0')) {
error("invalid dial event, aborting");
exit(EXIT_FAILURE);
}
@@ -145,7 +147,8 @@ static void handle_unknown_at(void *buf, uint16_t len)
{
struct hal_ev_handsfree_unknown_at *ev = buf;
- if (len != sizeof(*ev) + ev->len) {
+ if (len != sizeof(*ev) + ev->len ||
+ (ev->len != 0 && ev->buf[ev->len - 1] != '\0')) {
error("invalid unknown command event, aborting");
exit(EXIT_FAILURE);
}
@@ -387,7 +390,7 @@ static bt_status_t cops_response(const char *cops)
if (!cops)
return BT_STATUS_PARM_INVALID;
- cmd->len = strlen(cops);
+ cmd->len = strlen(cops) + 1;
memcpy(cmd->buf, cops, cmd->len);
len = sizeof(*cmd) + cmd->len;
@@ -435,7 +438,7 @@ static bt_status_t formatted_at_response(const char *rsp)
if (!rsp)
return BT_STATUS_PARM_INVALID;
- cmd->len = strlen(rsp);
+ cmd->len = strlen(rsp) + 1;
memcpy(cmd->buf, rsp, cmd->len);
len = sizeof(*cmd) + cmd->len;
@@ -486,7 +489,7 @@ static bt_status_t clcc_response(int index, bthf_call_direction_t dir,
cmd->type = type;
if (number) {
- cmd->number_len = strlen(number);
+ cmd->number_len = strlen(number) + 1;
memcpy(cmd->number, number, cmd->number_len);
} else {
cmd->number_len = 0;
@@ -519,7 +522,7 @@ static bt_status_t phone_state_change(int num_active, int num_held,
cmd->type = type;
if (number) {
- cmd->number_len = strlen(number);
+ cmd->number_len = strlen(number) + 1;
memcpy(cmd->number, number, cmd->number_len);
} else {
cmd->number_len = 0;