diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-09-26 09:03:02 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-09-26 09:03:02 +0200 |
commit | 9bfa9214967a34a07f538026eca6b46355ddde4f (patch) | |
tree | 2a529c86505559655ff93e8d41857b7430ef050f | |
parent | 35c7fd1a66fcdff0a2ae17a411c07cd2a92f867f (diff) |
fixup! libqmi-glib,utils: handle alignment issues when reading integers from the buffer
-rw-r--r-- | libqmi-glib/qmi-utils.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/libqmi-glib/qmi-utils.c b/libqmi-glib/qmi-utils.c index d07978c..a63124c 100644 --- a/libqmi-glib/qmi-utils.c +++ b/libqmi-glib/qmi-utils.c @@ -21,6 +21,7 @@ * Copyright (C) 2012 Aleksander Morgado <aleksander@lanedo.com> */ +#include <config.h> #include <string.h> #include <stdint.h> #include <stdio.h> @@ -61,6 +62,28 @@ qmi_utils_str_hex (gconstpointer mem, return new_str; } +#if defined UTILS_ENABLE_TRACE +static void +print_read_bytes_trace (const gchar *type, + gconstpointer buffer, + gconstpointer out, + guint n_bytes) +{ + gchar *str1; + gchar *str2; + + str1 = qmi_utils_str_hex (buffer, n_bytes, ':'); + str2 = qmi_utils_str_hex (out, n_bytes, ':'); + + g_debug ("Read %s (%s) --> (%s)", type, str1, str2); + + g_free (str1); + g_free (str2); +} +#else +#define print_read_bytes_trace(...) +#endif + void qmi_utils_read_guint8_from_buffer (guint8 **buffer, guint16 *buffer_size, @@ -73,6 +96,8 @@ qmi_utils_read_guint8_from_buffer (guint8 **buffer, *out = (*buffer)[0]; + print_read_bytes_trace ("guint8", &(*buffer)[0], out, 1); + *buffer = &((*buffer)[1]); *buffer_size = (*buffer_size) - 1; } @@ -89,6 +114,8 @@ qmi_utils_read_gint8_from_buffer (guint8 **buffer, *out = (gint8)(*buffer)[0]; + print_read_bytes_trace ("gint8", &(*buffer)[0], out, 1); + *buffer = &((*buffer)[1]); *buffer_size = (*buffer_size) - 1; } @@ -106,6 +133,8 @@ qmi_utils_read_guint16_from_buffer (guint8 **buffer, memcpy (out, &((*buffer)[0]), 2); *out = GUINT16_FROM_LE (*out); + print_read_bytes_trace ("guint16", &(*buffer)[0], out, 2); + *buffer = &((*buffer)[2]); *buffer_size = (*buffer_size) - 2; } @@ -123,6 +152,8 @@ qmi_utils_read_gint16_from_buffer (guint8 **buffer, memcpy (out, &((*buffer)[0]), 2); *out = GINT16_FROM_LE (*out); + print_read_bytes_trace ("gint16", &(*buffer)[0], out, 2); + *buffer = &((*buffer)[2]); *buffer_size = (*buffer_size) - 2; } @@ -140,6 +171,8 @@ qmi_utils_read_guint32_from_buffer (guint8 **buffer, memcpy (out, &((*buffer)[0]), 4); *out = GUINT32_FROM_LE (*out); + print_read_bytes_trace ("guint32", &(*buffer)[0], out, 4); + *buffer = &((*buffer)[4]); *buffer_size = (*buffer_size) - 4; } @@ -157,6 +190,8 @@ qmi_utils_read_gint32_from_buffer (guint8 **buffer, memcpy (out, &((*buffer)[0]), 4); *out = GINT32_FROM_LE (*out); + print_read_bytes_trace ("gint32", &(*buffer)[0], out, 4); + *buffer = &((*buffer)[4]); *buffer_size = (*buffer_size) - 4; } @@ -174,6 +209,8 @@ qmi_utils_read_guint64_from_buffer (guint8 **buffer, memcpy (out, &((*buffer)[0]), 8); *out = GUINT64_FROM_LE (*out); + print_read_bytes_trace ("guint64", &(*buffer)[0], out, 8); + *buffer = &((*buffer)[8]); *buffer_size = (*buffer_size) - 8; } @@ -191,6 +228,8 @@ qmi_utils_read_gint64_from_buffer (guint8 **buffer, memcpy (out, &((*buffer)[0]), 8); *out = GINT64_FROM_LE (*out); + print_read_bytes_trace ("gint64", &(*buffer)[0], out, 8); + *buffer = &((*buffer)[8]); *buffer_size = (*buffer_size) - 8; } |