diff options
author | Simon Busch <morphis@gravedo.de> | 2011-10-24 18:40:10 +0200 |
---|---|---|
committer | Simon Busch <morphis@gravedo.de> | 2011-10-24 19:09:56 +0200 |
commit | ef01149ee7c199cb21e0b9f20378141b3ec271ea (patch) | |
tree | 52729e9b42e9e16161c126e51091d052bdecf9ff /samsung-ipc/sec.c | |
parent | ffc43da883c6c4905f27bb02986a1422ef492d92 (diff) | |
download | hardware_replicant_libsamsung-ipc-ef01149ee7c199cb21e0b9f20378141b3ec271ea.tar.gz hardware_replicant_libsamsung-ipc-ef01149ee7c199cb21e0b9f20378141b3ec271ea.tar.bz2 hardware_replicant_libsamsung-ipc-ef01149ee7c199cb21e0b9f20378141b3ec271ea.zip |
Updates for retrieve imsi and rsim data from response messages
Signed-off-by: Simon Busch <morphis@gravedo.de>
Diffstat (limited to 'samsung-ipc/sec.c')
-rw-r--r-- | samsung-ipc/sec.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/samsung-ipc/sec.c b/samsung-ipc/sec.c index 1a7f154..e27f518 100644 --- a/samsung-ipc/sec.c +++ b/samsung-ipc/sec.c @@ -20,14 +20,34 @@ #include <radio.h> #include <string.h> +#include <stdlib.h> char* ipc_sec_rsim_access_response_get_file_data(struct ipc_response *response) { + int n = 0; + int offset = (int) sizeof(struct ipc_sec_rsim_access_response); + int size = 0; + if (response == NULL) return NULL; struct ipc_sec_rsim_access_response *rsimresp = (struct ipc_sec_rsim_access_response*) response->data; char *file_data = (char*) malloc(sizeof(char) * rsimresp->len); - memcpy(file_data, response->data + sizeof(struct ipc_sec_rsim_access_response), rsimresp->len); + + for (n = 0; n < rsimresp->len; n++) + { + if (response->data[offset + n] == 0x0) + continue; + else if (response->data[offset + n] == 0xff) + break; + else { + file_data[size] = response->data[offset + n]; + size++; + } + } + + if (size < rsimresp->len) + file_data = (char*) realloc(file_data, sizeof(char) * size); + return file_data; } |