diff options
author | Ziyan <jaraidaniel@gmail.com> | 2016-09-11 14:21:50 +0200 |
---|---|---|
committer | Andreas Blaesius <skate4life@gmx.de> | 2016-09-25 18:54:54 +0200 |
commit | 301856b13822b09294c59568946b36556062157d (patch) | |
tree | f21b6d6d70cad68321ad0603c1aaf7a5dd815a18 | |
parent | 9d932a7b11324537aa12d09589cc952032a5d117 (diff) | |
download | device_samsung_espresso3g-301856b13822b09294c59568946b36556062157d.zip device_samsung_espresso3g-301856b13822b09294c59568946b36556062157d.tar.gz device_samsung_espresso3g-301856b13822b09294c59568946b36556062157d.tar.bz2 |
libsecril-shim: fix RIL_REQUEST_DIAL
The Samsung RIL crashes if uusInfo is NULL...
Change-Id: I68a70b2f95ba170f97e2794ab0d318e387fa1d24
-rw-r--r-- | rilsrc/libsecril-shim/secril-shim.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/rilsrc/libsecril-shim/secril-shim.c b/rilsrc/libsecril-shim/secril-shim.c index ff2e737..ad22cee 100644 --- a/rilsrc/libsecril-shim/secril-shim.c +++ b/rilsrc/libsecril-shim/secril-shim.c @@ -6,9 +6,38 @@ static const RIL_RadioFunctions *origRilFunctions; /* A copy of the ril environment passed to RIL_Init. */ static const struct RIL_Env *rilEnv; +static void onRequestDial(int request, void *data, size_t datalen, RIL_Token t) { + RIL_Dial *dial = malloc(sizeof(RIL_Dial)); + RIL_UUS_Info *uusInfo = malloc(sizeof(RIL_UUS_Info)); + + memcpy(dial, data, datalen); + + if (dial->uusInfo == NULL) { + memset(uusInfo, 0, sizeof(RIL_UUS_Info)); + uusInfo->uusType = (RIL_UUS_Type) 0; + uusInfo->uusDcs = (RIL_UUS_DCS) 0; + uusInfo->uusData = NULL; + uusInfo->uusLength = 0; + dial->uusInfo = uusInfo; + } + + origRilFunctions->onRequest(request, dial, sizeof(RIL_Dial), t); + + free(uusInfo); + free(dial); +} + static void onRequestShim(int request, void *data, size_t datalen, RIL_Token t) { switch (request) { + /* The Samsung RIL crashes if uusInfo is NULL... */ + case RIL_REQUEST_DIAL: + if (datalen == sizeof(RIL_Dial) && data != NULL) { + onRequestDial(request, data, datalen, t); + return; + } + break; + /* Necessary; RILJ may fake this for us if we reply not supported, but we can just implement it. */ case RIL_REQUEST_GET_RADIO_CAPABILITY: ; /* lol C standard */ |