aboutsummaryrefslogtreecommitdiffstats
path: root/samsung-ipc/sec.c
diff options
context:
space:
mode:
authorSimon Busch <morphis@gravedo.de>2011-10-24 18:40:10 +0200
committerSimon Busch <morphis@gravedo.de>2011-10-24 19:09:56 +0200
commitef01149ee7c199cb21e0b9f20378141b3ec271ea (patch)
tree52729e9b42e9e16161c126e51091d052bdecf9ff /samsung-ipc/sec.c
parentffc43da883c6c4905f27bb02986a1422ef492d92 (diff)
downloadexternal_libsamsung-ipc-ef01149ee7c199cb21e0b9f20378141b3ec271ea.zip
external_libsamsung-ipc-ef01149ee7c199cb21e0b9f20378141b3ec271ea.tar.gz
external_libsamsung-ipc-ef01149ee7c199cb21e0b9f20378141b3ec271ea.tar.bz2
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.c22
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;
}