diff --git a/libril/ril_service.cpp b/libril/ril_service.cpp index 413da5f..876c638 100644 --- a/libril/ril_service.cpp +++ b/libril/ril_service.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #define INVALID_HEX_CHAR 16 @@ -4565,20 +4566,21 @@ int radio::getAvailableNetworksResponse(int slotId, #if VDBG RLOGD("getAvailableNetworksResponse: serial %d", serial); #endif + int qanRespStrings = property_get_int32("ro.ril.telephony.qan_resp_strings", 4); 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 % (qanRespStrings * 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/qanRespStrings); + for (int i = 0, j = 0; i < numStrings; i = i + qanRespStrings, j++) { networks[j].alphaLong = convertCharPtrToHidlString(resp[i]); networks[j].alphaShort = convertCharPtrToHidlString(resp[i + 1]); networks[j].operatorNumeric = convertCharPtrToHidlString(resp[i + 2]);