static int32 ini_find_var(INI_FILE *fp, int32 modu, int8 * puc_var, int8 *puc_value) { int32 ret; int8 auc_tmp[MAX_READ_LINE_NUM + 1] = {0}; size_t search_var_len; /* find the modu of var, such as [HOST_WIFI_NORMAL] of wifi moduler*/ ret = ini_find_modu(fp, modu, puc_var, puc_value); if (INI_FAILED == ret) { return INI_FAILED; } /* find the var in modu, such as [HOST_WIFI_NORMAL] of wifi moduler*/ while(1) { ret = ini_readline_func(fp, auc_tmp); if (INI_FAILED == ret) { INI_ERROR("have end of .ini file!!!"); return INI_FAILED; } if ('[' == auc_tmp[0]) { INI_ERROR("not find %s!!!, check if var in correct mode", puc_var); return INI_FAILED; } search_var_len = strlen(puc_var); ret = ini_check_str(fp, auc_tmp, puc_var); if (INI_SUCC == ret) { //INI_DEBUG("have found %s", puc_var); /* note coverity check !!!*/ strcpy(puc_value, &auc_tmp[search_var_len+1]); break; } else { continue; } } return INI_SUCC; }
static int32 ini_find_modu(INI_FILE *fp, int32 modu, int8 * puc_var, int8 *puc_value) { int8 auc_tmp[MAX_READ_LINE_NUM]; int8 auc_modu[INI_STR_MODU_LEN]; int32 l_mode_value; int32 ret; /* check the mode of moduler */ if (INI_FAILED == ini_check_value(puc_value)) { return INI_FAILED; } /* INI_MODU_PLAT has no mode*/ if (INI_MODU_PLAT != modu) { l_mode_value = puc_value[0] - '0'; if (10 < l_mode_value || 0 > l_mode_value) { INI_ERROR("not support value %s", puc_value); return INI_FAILED; } } switch (modu) { case INI_MODU_WIFI: /*find mode var*/ if (INI_MODE_NORMAL == l_mode_value) { strncpy(auc_modu, INI_STR_WIFI_NORMAL, INI_STR_MODU_LEN); } else if (INI_MODE_PERFORMANCE == l_mode_value) { strncpy(auc_modu, INI_STR_WIFI_PERFORMANCE, INI_STR_MODU_LEN); } else if (INI_MODE_CERTIFY == l_mode_value) { strncpy(auc_modu, INI_STR_WIFI_CERTIFY, INI_STR_MODU_LEN); } else if (INI_MODE_CERTIFY_CE == l_mode_value) { strncpy(auc_modu, INI_STR_WIFI_CERTIFY_CE, INI_STR_MODU_LEN); } else { INI_ERROR("not support mode!!!"); return INI_FAILED; } break; case INI_MODU_GNSS: if (INI_MODE_GPSGLONASS == l_mode_value) { strncpy(auc_modu, INI_STR_GNSS_GPSGLONASS, INI_STR_MODU_LEN); } else if (INI_MODE_BDGPS == l_mode_value) { strncpy(auc_modu, INI_STR_GNSS_BDGPS, INI_STR_MODU_LEN); } else { INI_ERROR("not support mode!!!"); return INI_FAILED; } break; case INI_MODU_BT: strncpy(auc_modu, INI_STR_BT_NORMAL, INI_STR_MODU_LEN); break; case INI_MODU_FM: strncpy(auc_modu, INI_STR_FM_NORMAL, INI_STR_MODU_LEN); break; case INI_MODU_WIFI_PLAT: strncpy(auc_modu, INI_STR_WIFI_PLAT_NORMAL, INI_STR_MODU_LEN); break; case INI_MODU_BFG_PLAT: strncpy(auc_modu, INI_STR_BFG_PLAT_NORMAL, INI_STR_MODU_LEN); break; case INI_MODU_PLAT: strncpy(auc_modu, INI_STR_PLAT, INI_STR_MODU_LEN); break; case INI_MODU_HOST_VERSION: strncpy(auc_modu, INT_STR_HOST_VERSION, INI_STR_MODU_LEN); break; case INI_MODU_WIFI_MAC: strncpy(auc_modu, INI_STR_WIFI_MAC, INI_STR_MODU_LEN); break; case INI_MODU_COEXIST: strncpy(auc_modu, INI_STR_COEXIST, INI_STR_MODU_LEN); break; default : INI_ERROR("not suport modu type!!!"); break; } /* find the value of mode var, such as ini_wifi_mode * every mode except PLAT mode has only one mode var */ while(1) { ret = ini_readline_func(fp, auc_tmp); if (INI_FAILED == ret) { INI_ERROR("have end of .ini file!!!"); return INI_FAILED; } if (NULL != strstr(auc_tmp, INI_STR_DEVICE_BFG_PLAT)) { INI_ERROR("not find %s!!!", auc_modu); return INI_FAILED; } ret = ini_check_str(fp, auc_tmp, auc_modu); if (INI_SUCC == ret) { INI_DEBUG("have found %s", auc_modu); break; } else { continue; } } return INI_SUCC; }
static int32 ini_find_mode(INI_FILE *fp, int32 modu, int8 *puc_var, int8 *puc_value, uint32 size) { int32 ret; int8 auc_tmp[MAX_READ_LINE_NUM]; int8 auc_mode_var[INI_STR_MODU_LEN]; int8 *puc_val = NULL; switch (modu) { case INI_MODU_WIFI: strncpy(auc_mode_var, INI_MODE_VAR_WIFI, INI_STR_MODU_LEN); break; case INI_MODU_GNSS: strncpy(auc_mode_var, INI_MODE_VAR_GNSS, INI_STR_MODU_LEN); break; case INI_MODU_BT: strncpy(auc_mode_var, INI_MODE_VAR_BT, INI_STR_MODU_LEN); break; case INI_MODU_FM: strncpy(auc_mode_var, INI_MODE_VAR_FM, INI_STR_MODU_LEN); break; case INI_MODU_WIFI_PLAT: strncpy(auc_mode_var, INI_MODE_VAR_WIFI_PLAT, INI_STR_MODU_LEN); break; case INI_MODU_BFG_PLAT: strncpy(auc_mode_var, INI_MODE_VAR_BFG_PLAT, INI_STR_MODU_LEN); break; case INI_MODU_PLAT: case INI_MODU_HOST_VERSION: case INI_MODU_WIFI_MAC: case INI_MODU_COEXIST: return INI_SUCC; break; default : INI_ERROR("not suport modu type!!!"); break; } while(1) { ret = ini_readline_func(fp, auc_tmp); if (INI_FAILED == ret) { INI_ERROR("have end of .ini file!!!"); return INI_FAILED; } if (NULL != strstr(auc_tmp, INI_STR_DEVICE_BFG_PLAT)) { INI_ERROR("not find %s!!!", auc_mode_var); return INI_FAILED; } ret = ini_check_str(fp, auc_tmp, auc_mode_var); if (INI_SUCC == ret) { INI_DEBUG("have found %s", auc_mode_var); break; } else { continue; } } puc_val = strstr(auc_tmp, "="); if (NULL == puc_val) { INI_ERROR("has not find = in %s", auc_tmp); return INI_FAILED; } strncpy(puc_value, puc_val + 1, size); if (0 == strcmp(auc_mode_var, puc_var)) { return INI_SUCC_MODE_VAR; } return INI_SUCC; }
static int32 ini_write_mode_value(INI_FILE *fp, int32 modu, int8 * puc_var, int8 * puc_value) { int32 l_len; int32 ret; int8 auc_tmp[MAX_READ_LINE_NUM + 1] = {0}; int8 auc_mode_var[INI_STR_MODU_LEN + 1] = {0}; int8 *puc_val = NULL; int8 auc_change_bin[INI_STR_MODU_LEN * 2 + 1] = {0}; int8 auc_cmd[INI_STR_MODU_LEN * 4 + 1] = {0}; int16 search_var_len; switch (modu) { case INI_MODU_WIFI: strncpy(auc_mode_var, INI_MODE_VAR_WIFI, INI_STR_MODU_LEN); if ('0' > puc_value[0] || '2' < puc_value[0]) { INI_ERROR("not support mode!!!"); return INI_FAILED; } break; case INI_MODU_GNSS: if ('0' > puc_value[0] || '1' < puc_value[0]) { INI_ERROR("not support mode!!!"); return INI_FAILED; } strncpy(auc_mode_var, INI_MODE_VAR_GNSS, INI_STR_MODU_LEN); break; case INI_MODU_BT: if ('0' != puc_value[0]) { INI_ERROR("not support mode!!!"); return INI_FAILED; } strncpy(auc_mode_var, INI_MODE_VAR_BT, INI_STR_MODU_LEN); break; case INI_MODU_FM: if ('0' != puc_value[0]) { INI_ERROR("not support mode!!!"); return INI_FAILED; } strncpy(auc_mode_var, INI_MODE_VAR_FM, INI_STR_MODU_LEN); break; case INI_MODU_WIFI_PLAT: if ('0' != puc_value[0]) { INI_ERROR("not support mode!!!"); return INI_FAILED; } strncpy(auc_mode_var, INI_MODE_VAR_WIFI_PLAT, INI_STR_MODU_LEN); break; case INI_MODU_BFG_PLAT: if ('0' != puc_value[0]) { INI_ERROR("not support mode!!!"); return INI_FAILED; } strncpy(auc_mode_var, INI_MODE_VAR_BFG_PLAT, INI_STR_MODU_LEN); break; default : INI_ERROR("not suport modu type!!!"); break; } while(1) { ret = ini_readline_func(fp, auc_tmp); if (INI_FAILED == ret) { INI_ERROR("have end of .ini file!!!"); return INI_FAILED; } if (NULL != strstr(auc_tmp, INI_STR_WIFI_NORMAL0)) { INI_ERROR("not find %s!!!", auc_mode_var); return INI_FAILED; } ret = ini_check_str(fp, auc_tmp, auc_mode_var); if (INI_SUCC == ret) { INI_DEBUG("have found %s", auc_mode_var); break; } else { continue; } } puc_val = strstr(auc_tmp, "="); if (NULL == puc_val) { INI_ERROR("has not find = in %s", auc_tmp); return INI_FAILED; } if (INI_FAILED == ini_check_value(puc_val + 1)) { INI_ERROR("not support to write :%s:", auc_tmp); return INI_FAILED; } l_len = strlen(auc_tmp); search_var_len = strlen(puc_var); strncpy(&auc_tmp[search_var_len+1], puc_value, 1); if (INI_FAILED == fseek(fp, -l_len, SEEK_CUR)) { INI_ERROR("file seek failed!!!"); return INI_FAILED; } if (fputs(auc_tmp, fp)) { INI_DEBUG("puc_write_val :%s: ok", auc_tmp); } if (INI_MODU_WIFI == modu) { if ('0' == puc_value[0]) { strncpy(auc_change_bin, INI_SDIOBIN_NORMAL, INI_STR_MODU_LEN * 2); } else if ('1' == puc_value[0]) { strncpy(auc_change_bin, INI_SDIOBIN_PERFORMANCE, INI_STR_MODU_LEN * 2); } else if ('2' == puc_value[0]) { strncpy(auc_change_bin, INI_SDIOBIN_CERTIFY, INI_STR_MODU_LEN * 2); } else { INI_ERROR("not support to bin type %s", auc_change_bin); return INI_FAILED; } sprintf(auc_cmd, INI_STR_MODU_LEN * 4,"cp %s %s", auc_change_bin, INI_SDIOBIN_DEFAULT); INI_INFO("exct %s", auc_cmd); system(auc_cmd); } return INI_SUCC; }