From 0f0532eb6ff629480c5f1acbdbb5ca9acde6f256 Mon Sep 17 00:00:00 2001 From: Aki Niemi Date: Tue, 30 Nov 2010 14:51:39 +0200 Subject: [PATCH] gisi: Add getter for 16bit fields --- gisi/message.c | 17 +++++++++++++++++ gisi/message.h | 2 ++ 2 files changed, 19 insertions(+) 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 #include +#include #include #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);