Some string we can directly copy from context to IPC event struct. --- android/handsfree-client.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/android/handsfree-client.c b/android/handsfree-client.c index f7a03cc..3eb8517 100644 --- a/android/handsfree-client.c +++ b/android/handsfree-client.c @@ -85,6 +85,9 @@ #define CODEC_ID_CVSD 0x01 #define CODEC_ID_MSBC 0x02 +#define MAX_NUMBER_LEN 33 +#define MAX_OPERATOR_NAME_LEN 17 + enum hfp_indicator { HFP_INDICATOR_SERVICE = 0, HFP_INDICATOR_CALL, @@ -938,7 +941,6 @@ static void clcc_cb(struct hfp_context *context, void *user_data) uint8_t buf[IPC_MTU]; struct hal_ev_hf_client_current_call *ev = (void *) buf; unsigned int val; - char number[33]; DBG(""); @@ -980,10 +982,9 @@ static void clcc_cb(struct hfp_context *context, void *user_data) ev->multiparty = val; - if (hfp_context_get_string(context, number, sizeof(number))) { - ev->number_len = strlen(number) + 1; - memcpy(ev->number, number, ev->number_len); - } + if (hfp_context_get_string(context, (char *) &ev->number[0], + MAX_NUMBER_LEN)) + ev->number_len = strlen((char *) ev->number) + 1; ipc_send_notif(hal_ipc, HAL_SERVICE_ID_HANDSFREE_CLIENT, HAL_EV_HF_CLIENT_CURRENT_CALL, @@ -1020,7 +1021,6 @@ static void cnum_cb(struct hfp_context *context, void *user_data) { uint8_t buf[IPC_MTU]; struct hal_ev_hf_client_subscriber_service_info *ev = (void *) buf; - char number[33]; unsigned int service; DBG(""); @@ -1028,11 +1028,14 @@ static void cnum_cb(struct hfp_context *context, void *user_data) /* Alpha field is empty string, just skip it */ hfp_context_skip_field(context); - if (!hfp_context_get_string(context, number, sizeof(number))) { + if (!hfp_context_get_string(context, (char *) &ev->name[0], + MAX_NUMBER_LEN)) { error("hf-client: Could not get number"); return; } + ev->name_len = strlen((char *) &ev->name[0]) + 1; + /* Type is not used in Android */ hfp_context_skip_field(context); @@ -1042,9 +1045,6 @@ static void cnum_cb(struct hfp_context *context, void *user_data) if (!hfp_context_get_number(context, &service)) return; - ev->name_len = strlen(number) + 1; - memcpy(ev->name, number, ev->name_len); - switch (service) { case 4: ev->type = HAL_HF_CLIENT_SUBSCR_TYPE_VOICE; @@ -1066,7 +1066,6 @@ static void cops_cb(struct hfp_context *context, void *user_data) { uint8_t buf[IPC_MTU]; struct hal_ev_hf_client_operator_name *ev = (void *) buf; - char name[17]; unsigned int format; DBG(""); @@ -1080,13 +1079,13 @@ static void cops_cb(struct hfp_context *context, void *user_data) if (format != 0) info("hf-client: Not correct string format in +COSP"); - if (!hfp_context_get_string(context, name, sizeof(name))) { + if (!hfp_context_get_string(context,(char *) &ev->name[0] , + MAX_OPERATOR_NAME_LEN)) { error("hf-client: incorrect COPS response"); return; } - ev->name_len = strlen(name) + 1; - memcpy(ev->name, name, ev->name_len); + ev->name_len = strlen((char *) &ev->name[0]) + 1; ipc_send_notif(hal_ipc, HAL_SERVICE_ID_HANDSFREE_CLIENT, HAL_EV_HF_CLIENT_OPERATOR_NAME, -- 1.8.4 -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html