From: Martin Bouchet Date: Sun, 24 Sep 2017 07:51:55 +0000 (-0300) Subject: libril: fix network operator search X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=f7c75aa4e0;p=GitHub%2FLineageOS%2Fandroid_hardware_samsung.git libril: fix network operator search The number of mQANElements should be defined in the system prop ro.ril.telephony.mqanelements Change-Id: Ie5bb8ba80c5ac93b7502da3b1bb3d2b4404ecd5e --- diff --git a/ril/libril/ril_service.cpp b/ril/libril/ril_service.cpp index 949ee30..f36ceb3 100644 --- a/ril/libril/ril_service.cpp +++ b/ril/libril/ril_service.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #define INVALID_HEX_CHAR 16 @@ -3700,6 +3701,10 @@ int radio::getOperatorResponse(int slotId, #if VDBG RLOGD("getOperatorResponse: serial %d", serial); #endif + int mqanelements; + char value[PROPERTY_VALUE_MAX]; + property_get("ro.ril.telephony.mqanelements", value, "4"); + mqanelements = atoi(value); if (radioService[slotId]->mRadioResponse != NULL) { RadioResponseInfo responseInfo = {}; @@ -3708,14 +3713,14 @@ int radio::getOperatorResponse(int slotId, hidl_string shortName; hidl_string numeric; int numStrings = responseLen / sizeof(char *); - if (response == NULL || numStrings != 3) { + if (response == NULL || numStrings != mqanelements - 2) { RLOGE("getOperatorResponse Invalid response: NULL"); if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE; } else { char **resp = (char **) response; longName = convertCharPtrToHidlString(resp[0]); - shortName = convertCharPtrToHidlString(resp[1]); + shortName = convertCharPtrToHidlString(resp[0]); numeric = convertCharPtrToHidlString(resp[2]); } Return retStatus = radioService[slotId]->mRadioResponse->getOperatorResponse( @@ -4344,22 +4349,26 @@ int radio::getAvailableNetworksResponse(int slotId, #if VDBG RLOGD("getAvailableNetworksResponse: serial %d", serial); #endif + int mqanelements; + char value[PROPERTY_VALUE_MAX]; + property_get("ro.ril.telephony.mqanelements", value, "4"); + mqanelements = atoi(value); if (radioService[slotId]->mRadioResponse != NULL) { RadioResponseInfo responseInfo = {}; populateResponseInfo(responseInfo, serial, responseType, e); hidl_vec networks; if ((response == NULL && responseLen != 0) - || responseLen % (4 * sizeof(char *))!= 0) { + || responseLen % (mqanelements * sizeof(char *))!= 0) { RLOGE("getAvailableNetworksResponse Invalid response: NULL"); if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE; } else { char **resp = (char **) response; int numStrings = responseLen / sizeof(char *); - networks.resize(numStrings/4); - for (int i = 0, j = 0; i < numStrings; i = i + 4, j++) { + networks.resize(numStrings/mqanelements); + for (int i = 0, j = 0; i < numStrings; i = i + mqanelements, j++) { networks[j].alphaLong = convertCharPtrToHidlString(resp[i]); - networks[j].alphaShort = convertCharPtrToHidlString(resp[i + 1]); + networks[j].alphaShort = convertCharPtrToHidlString(resp[i]); networks[j].operatorNumeric = convertCharPtrToHidlString(resp[i + 2]); int status = convertOperatorStatusToInt(resp[i + 3]); if (status == -1) {