summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-09-26 09:03:02 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-09-26 09:03:02 +0200
commit9bfa9214967a34a07f538026eca6b46355ddde4f (patch)
tree2a529c86505559655ff93e8d41857b7430ef050f
parent35c7fd1a66fcdff0a2ae17a411c07cd2a92f867f (diff)
fixup! libqmi-glib,utils: handle alignment issues when reading integers from the buffer
-rw-r--r--libqmi-glib/qmi-utils.c39
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;
}