From b9de1d999f44efd5959169c37069b86fa11eb7de Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Tue, 26 Sep 2017 13:27:35 -0500 Subject: [PATCH] mbim: Add mbim_message_get_arguments --- drivers/mbimmodem/mbim-message.c | 32 ++++++++++++++++++++++++++++++++ drivers/mbimmodem/mbim-message.h | 3 +++ 2 files changed, 35 insertions(+) diff --git a/drivers/mbimmodem/mbim-message.c b/drivers/mbimmodem/mbim-message.c index dd036831..16d3bf07 100644 --- a/drivers/mbimmodem/mbim-message.c +++ b/drivers/mbimmodem/mbim-message.c @@ -412,3 +412,35 @@ struct mbim_message *_mbim_message_build(const void *header, return msg; } + +bool mbim_message_get_arguments(struct mbim_message *message, + const char *signature, ...) +{ + struct mbim_message_iter iter; + va_list args; + bool result; + struct mbim_message_header *hdr; + uint32_t type; + size_t begin; + + if (unlikely(!message)) + return false; + + if (unlikely(!message->sealed)) + return false; + + hdr = (struct mbim_message_header *) message->header; + type = L_LE32_TO_CPU(hdr->type); + begin = _mbim_information_buffer_offset(type); + + _iter_init_internal(&iter, CONTAINER_TYPE_STRUCT, + signature, NULL, + message->frags, message->n_frags, + message->info_buf_len, begin, 0, 0); + + va_start(args, signature); + result = message_iter_next_entry_valist(&iter, args); + va_end(args); + + return result; +} diff --git a/drivers/mbimmodem/mbim-message.h b/drivers/mbimmodem/mbim-message.h index 2e817d2c..dda523c0 100644 --- a/drivers/mbimmodem/mbim-message.h +++ b/drivers/mbimmodem/mbim-message.h @@ -43,4 +43,7 @@ struct mbim_message *mbim_message_new(const uint8_t *uuid, uint32_t cid); struct mbim_message *mbim_message_ref(struct mbim_message *msg); void mbim_message_unref(struct mbim_message *msg); +bool mbim_message_get_arguments(struct mbim_message *message, + const char *signature, ...); + bool mbim_message_iter_next_entry(struct mbim_message_iter *iter, ...);