From 056cf387d88ab0a0eab0c097474d62d8c3d09c13 Mon Sep 17 00:00:00 2001 From: Paul Kocialkowski Date: Sat, 2 Aug 2014 17:37:08 +0200 Subject: net: PLMN list extract helpers, PLMN type Signed-off-by: Paul Kocialkowski --- samsung-ipc/net.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'samsung-ipc/net.c') diff --git a/samsung-ipc/net.c b/samsung-ipc/net.c index 0597c42..50cc18f 100644 --- a/samsung-ipc/net.c +++ b/samsung-ipc/net.c @@ -66,4 +66,44 @@ int ipc_net_regist_setup(struct ipc_net_regist_request_data *data, return 0; } +unsigned char ipc_net_plmn_list_count_extract(const void *data, size_t size) +{ + struct ipc_net_plmn_list_header *header; + + if (data == NULL || size < sizeof(struct ipc_net_plmn_list_header)) + return 0; + + header = (struct ipc_net_plmn_list_header *) data; + + return header->count; +} + +struct ipc_net_plmn_list_entry *ipc_net_plmn_list_entry_extract(const void *data, + size_t size, unsigned int index) +{ + struct ipc_net_plmn_list_entry *entry = NULL; + unsigned char count; + unsigned char i; + unsigned int offset; + + if (data == NULL) + return NULL; + + count = ipc_net_plmn_list_count_extract(data, size); + if (count == 0 || index >= count) + return NULL; + + offset = sizeof(struct ipc_net_plmn_list_header); + + for (i = 0; i < (index + 1); i++) { + entry = (struct ipc_net_plmn_list_entry *) ((unsigned char *) data + offset); + offset += sizeof(struct ipc_net_plmn_list_entry); + } + + if (offset > size) + return NULL; + + return entry; +} + // vim:ts=4:sw=4:expandtab -- cgit v1.1