summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-09-26 09:02:43 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-09-26 09:02:43 +0200
commit35c7fd1a66fcdff0a2ae17a411c07cd2a92f867f (patch)
treeccdc7486845433af6097390f65ff21d4751b9712
parent6cdd627a10b0b714fae7f54c0e4f035ceb40dd65 (diff)
fixup! libqmi-glib,utils: handle alignment issues when reading integers from the buffer
-rw-r--r--libqmi-glib/qmi-utils.c45
1 files changed, 16 insertions, 29 deletions
diff --git a/libqmi-glib/qmi-utils.c b/libqmi-glib/qmi-utils.c
index c9f57bf..d07978c 100644
--- a/libqmi-glib/qmi-utils.c
+++ b/libqmi-glib/qmi-utils.c
@@ -87,7 +87,7 @@ qmi_utils_read_gint8_from_buffer (guint8 **buffer,
g_assert (buffer_size != NULL);
g_assert (*buffer_size >= 1);
- *out = *((gint8 *)(&((*buffer)[0])));
+ *out = (gint8)(*buffer)[0];
*buffer = &((*buffer)[1]);
*buffer_size = (*buffer_size) - 1;
@@ -98,15 +98,13 @@ qmi_utils_read_guint16_from_buffer (guint8 **buffer,
guint16 *buffer_size,
guint16 *out)
{
- guint16 tmp;
-
g_assert (out != NULL);
g_assert (buffer != NULL);
g_assert (buffer_size != NULL);
g_assert (*buffer_size >= 2);
- memcpy (&tmp, &((*buffer)[0]), sizeof (tmp));
- *out = GUINT16_FROM_LE (tmp);
+ memcpy (out, &((*buffer)[0]), 2);
+ *out = GUINT16_FROM_LE (*out);
*buffer = &((*buffer)[2]);
*buffer_size = (*buffer_size) - 2;
@@ -117,15 +115,13 @@ qmi_utils_read_gint16_from_buffer (guint8 **buffer,
guint16 *buffer_size,
gint16 *out)
{
- gint16 tmp;
-
g_assert (out != NULL);
g_assert (buffer != NULL);
g_assert (buffer_size != NULL);
g_assert (*buffer_size >= 2);
- memcpy (&tmp, &((*buffer)[0]), sizeof (tmp));
- *out = GINT16_FROM_LE (tmp);
+ memcpy (out, &((*buffer)[0]), 2);
+ *out = GINT16_FROM_LE (*out);
*buffer = &((*buffer)[2]);
*buffer_size = (*buffer_size) - 2;
@@ -136,15 +132,13 @@ qmi_utils_read_guint32_from_buffer (guint8 **buffer,
guint16 *buffer_size,
guint32 *out)
{
- guint32 tmp;
-
g_assert (out != NULL);
g_assert (buffer != NULL);
g_assert (buffer_size != NULL);
g_assert (*buffer_size >= 4);
- memcpy (&tmp, &((*buffer)[0]), sizeof (tmp));
- *out = GUINT32_FROM_LE (tmp);
+ memcpy (out, &((*buffer)[0]), 4);
+ *out = GUINT32_FROM_LE (*out);
*buffer = &((*buffer)[4]);
*buffer_size = (*buffer_size) - 4;
@@ -155,15 +149,13 @@ qmi_utils_read_gint32_from_buffer (guint8 **buffer,
guint16 *buffer_size,
gint32 *out)
{
- gint32 tmp;
-
g_assert (out != NULL);
g_assert (buffer != NULL);
g_assert (buffer_size != NULL);
g_assert (*buffer_size >= 4);
- memcpy (&tmp, &((*buffer)[0]), sizeof (tmp));
- *out = GINT32_FROM_LE (tmp);
+ memcpy (out, &((*buffer)[0]), 4);
+ *out = GINT32_FROM_LE (*out);
*buffer = &((*buffer)[4]);
*buffer_size = (*buffer_size) - 4;
@@ -174,15 +166,13 @@ qmi_utils_read_guint64_from_buffer (guint8 **buffer,
guint16 *buffer_size,
guint64 *out)
{
- guint64 tmp;
-
g_assert (out != NULL);
g_assert (buffer != NULL);
g_assert (buffer_size != NULL);
g_assert (*buffer_size >= 8);
- memcpy (&tmp, &((*buffer)[0]), sizeof (tmp));
- *out = GUINT64_FROM_LE (tmp);
+ memcpy (out, &((*buffer)[0]), 8);
+ *out = GUINT64_FROM_LE (*out);
*buffer = &((*buffer)[8]);
*buffer_size = (*buffer_size) - 8;
@@ -193,15 +183,13 @@ qmi_utils_read_gint64_from_buffer (guint8 **buffer,
guint16 *buffer_size,
gint64 *out)
{
- gint64 tmp;
-
g_assert (out != NULL);
g_assert (buffer != NULL);
g_assert (buffer_size != NULL);
g_assert (*buffer_size >= 8);
- memcpy (&tmp, &((*buffer)[0]), sizeof (tmp));
- *out = GINT64_FROM_LE (tmp);
+ memcpy (out, &((*buffer)[0]), 8);
+ *out = GINT64_FROM_LE (*out);
*buffer = &((*buffer)[8]);
*buffer_size = (*buffer_size) - 8;
@@ -213,15 +201,14 @@ qmi_utils_read_sized_guint_from_buffer (guint8 **buffer,
guint n_bytes,
guint64 *out)
{
- guint64 tmp = 0;
-
g_assert (out != NULL);
g_assert (buffer != NULL);
g_assert (buffer_size != NULL);
g_assert (*buffer_size >= n_bytes);
- memcpy (&tmp, *buffer, n_bytes);
- *out = GUINT64_FROM_LE (tmp);
+ *out = 0;
+ memcpy (out, *buffer, n_bytes);
+ *out = GUINT64_FROM_LE (*out);
*buffer = &((*buffer)[n_bytes]);
*buffer_size = (*buffer_size) - n_bytes;