}
bool __get_assistant_enable_status(const char* app_id, char* assistants) {
- char* str_ptr = NULL;
- char* temp = strtok_r(assistants, ";", &str_ptr);
+ char* rest = assistants;
+ char* temp = strtok_r(rest, ";", &rest);
while(temp) {
if (!strncmp(app_id, temp, MAX_ASSISTANT_INFO_STR_LEN)) {
return true;
}
- temp = strtok_r(NULL, ";", &str_ptr);
+ temp = strtok_r(rest, ";", &rest);
}
return false;
}
int ma_assistant_info_get_enabled_status(ma_assistant_info_h handle, bool* status) {
if (NULL == handle || NULL == status)
return MA_ERROR_INVALID_PARAMETER;
+
+ char* appid = vconf_get_str(APPID_URL);
+ if (NULL == appid) {
+ return MA_ERROR_OPERATION_FAILED;
+ }
+
assistant_info_t* info = (assistant_info_t*)handle;
- *status = __get_assistant_enable_status(info->app_id, vconf_get_str(APPID_URL));
+ char id_buf[MAX_ASSISTANT_INFO_STR_LEN] = "";
+ snprintf(id_buf, MAX_ASSISTANT_INFO_STR_LEN, "%s", appid);
+ *status = __get_assistant_enable_status(info->app_id, id_buf);
+ free(appid);
return MA_ERROR_NONE;
}
char* tmp = strstr(enabled_assistants, app_id);
if (tmp) {
char assistants[MAX_LEN] = "";
- char* outptr = NULL;
- char* as = strtok_r(enabled_assistants, ";", &outptr);
+ char old_assistants[MAX_LEN] = "";
+ /*to prevent memory leak for cut the string enabled_assistants*/
+ snprintf(old_assistants, MAX_LEN, "%s", enabled_assistants);
+ char* rest = old_assistants;
+ char* as = strtok_r(rest, ";", &rest);
while (as) {
if (strncmp(app_id, as, MAX_LEN)) {
if ((strlen(as) + strlen(assistants) + 1) <= MAX_LEN) {
return res;
}
}
- as = strtok_r(NULL, ";", &outptr);
+ as = strtok_r(rest, ";", &rest);
}
if (vconf_set_str(ENABLED_ASSISTANT_URL, assistants)) {
res = MA_ERROR_NONE;