diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-09-26 09:02:43 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-09-26 09:02:43 +0200 |
commit | 35c7fd1a66fcdff0a2ae17a411c07cd2a92f867f (patch) | |
tree | ccdc7486845433af6097390f65ff21d4751b9712 | |
parent | 6cdd627a10b0b714fae7f54c0e4f035ceb40dd65 (diff) |
fixup! libqmi-glib,utils: handle alignment issues when reading integers from the buffer
-rw-r--r-- | libqmi-glib/qmi-utils.c | 45 |
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; |