diff options
author | Aki Niemi <aki.niemi@nokia.com> | 2010-11-30 14:51:39 +0200 |
---|---|---|
committer | Aki Niemi <aki.niemi@nokia.com> | 2010-12-22 17:13:48 +0200 |
commit | 0f0532eb6ff629480c5f1acbdbb5ca9acde6f256 (patch) | |
tree | aec9982c0115d0e2f0a7859babcf613738bebe20 /gisi | |
parent | b4779411716610332d1165fb6114ffc742f627f0 (diff) | |
download | ofono-0f0532eb6ff629480c5f1acbdbb5ca9acde6f256.tar.bz2 |
gisi: Add getter for 16bit fields
Diffstat (limited to 'gisi')
-rw-r--r-- | gisi/message.c | 17 | ||||
-rw-r--r-- | gisi/message.h | 2 |
2 files changed, 19 insertions, 0 deletions
diff --git a/gisi/message.c b/gisi/message.c index 9284d597..51672e68 100644 --- a/gisi/message.c +++ b/gisi/message.c @@ -25,6 +25,7 @@ #include <stdint.h> #include <errno.h> +#include <arpa/inet.h> #include <glib.h> #include "message.h" @@ -102,6 +103,22 @@ gboolean g_isi_msg_data_get_byte(const GIsiMessage *msg, unsigned offset, return TRUE; } +gboolean g_isi_msg_data_get_word(const GIsiMessage *msg, unsigned offset, + uint16_t *word) +{ + const uint8_t *buf = g_isi_msg_data(msg); + uint16_t val; + + if (!buf || g_isi_msg_data_len(msg) < offset + 1) + return FALSE; + + memcpy(&val, buf + offset, sizeof(uint16_t)); + if (word) + *word = ntohs(val); + + return TRUE; +} + gboolean g_isi_msg_data_get_struct(const GIsiMessage *msg, unsigned offset, const void **type, size_t len) { diff --git a/gisi/message.h b/gisi/message.h index 0be7e5bb..d71b8db4 100644 --- a/gisi/message.h +++ b/gisi/message.h @@ -60,6 +60,8 @@ const void *g_isi_msg_data(const GIsiMessage *msg); gboolean g_isi_msg_data_get_byte(const GIsiMessage *msg, unsigned offset, uint8_t *byte); +gboolean g_isi_msg_data_get_word(const GIsiMessage *msg, unsigned offset, + uint16_t *word); gboolean g_isi_msg_data_get_struct(const GIsiMessage *msg, unsigned offset, const void **type, size_t len); |