[glib] GDBusMessage: simplify byteswapping
- From: Ryan Lortie <desrt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] GDBusMessage: simplify byteswapping
- Date: Mon, 7 Jul 2014 19:03:19 +0000 (UTC)
commit d108ada4b98cb50fb1517f55c4f09acdaf3de471
Author: Ryan Lortie <desrt desrt ca>
Date: Fri Jul 4 14:59:17 2014 -0400
GDBusMessage: simplify byteswapping
Remove some duplication by simplifying our byteswap checks.
https://bugzilla.gnome.org/show_bug.cgi?id=732754
gio/gdbusmessage.c | 108 +++++++++++++++++-----------------------------------
1 files changed, 35 insertions(+), 73 deletions(-)
---
diff --git a/gio/gdbusmessage.c b/gio/gdbusmessage.c
index dade2b9..b41f649 100644
--- a/gio/gdbusmessage.c
+++ b/gio/gdbusmessage.c
@@ -64,6 +64,16 @@ struct _GMemoryBuffer
GDataStreamByteOrder byte_order;
};
+static gboolean
+g_memory_buffer_is_byteswapped (GMemoryBuffer *mbuf)
+{
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ return mbuf->byte_order == G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN;
+#else
+ return mbuf->byte_order == G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN;
+#endif
+}
+
static guchar
g_memory_buffer_read_byte (GMemoryBuffer *mbuf)
{
@@ -85,18 +95,10 @@ g_memory_buffer_read_int16 (GMemoryBuffer *mbuf)
memcpy (&v, mbuf->data + mbuf->pos, 2);
mbuf->pos += 2;
- switch (mbuf->byte_order)
- {
- case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
- v = GINT16_FROM_BE (v);
- break;
- case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
- v = GINT16_FROM_LE (v);
- break;
- case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
- default:
- break;
- }
+
+ if (g_memory_buffer_is_byteswapped (mbuf))
+ v = GUINT16_SWAP_LE_BE (v);
+
return v;
}
@@ -113,18 +115,10 @@ g_memory_buffer_read_uint16 (GMemoryBuffer *mbuf)
memcpy (&v, mbuf->data + mbuf->pos, 2);
mbuf->pos += 2;
- switch (mbuf->byte_order)
- {
- case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
- v = GINT16_FROM_BE (v);
- break;
- case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
- v = GINT16_FROM_LE (v);
- break;
- case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
- default:
- break;
- }
+
+ if (g_memory_buffer_is_byteswapped (mbuf))
+ v = GUINT16_SWAP_LE_BE (v);
+
return v;
}
@@ -141,18 +135,10 @@ g_memory_buffer_read_int32 (GMemoryBuffer *mbuf)
memcpy (&v, mbuf->data + mbuf->pos, 4);
mbuf->pos += 4;
- switch (mbuf->byte_order)
- {
- case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
- v = GINT32_FROM_BE (v);
- break;
- case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
- v = GINT32_FROM_LE (v);
- break;
- case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
- default:
- break;
- }
+
+ if (g_memory_buffer_is_byteswapped (mbuf))
+ v = GUINT32_SWAP_LE_BE (v);
+
return v;
}
@@ -169,18 +155,10 @@ g_memory_buffer_read_uint32 (GMemoryBuffer *mbuf)
memcpy (&v, mbuf->data + mbuf->pos, 4);
mbuf->pos += 4;
- switch (mbuf->byte_order)
- {
- case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
- v = GUINT32_FROM_BE (v);
- break;
- case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
- v = GUINT32_FROM_LE (v);
- break;
- case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
- default:
- break;
- }
+
+ if (g_memory_buffer_is_byteswapped (mbuf))
+ v = GUINT32_SWAP_LE_BE (v);
+
return v;
}
@@ -197,18 +175,10 @@ g_memory_buffer_read_int64 (GMemoryBuffer *mbuf)
memcpy (&v, mbuf->data + mbuf->pos, 8);
mbuf->pos += 8;
- switch (mbuf->byte_order)
- {
- case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
- v = GINT64_FROM_BE (v);
- break;
- case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
- v = GINT64_FROM_LE (v);
- break;
- case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
- default:
- break;
- }
+
+ if (g_memory_buffer_is_byteswapped (mbuf))
+ v = GUINT64_SWAP_LE_BE (v);
+
return v;
}
@@ -225,19 +195,11 @@ g_memory_buffer_read_uint64 (GMemoryBuffer *mbuf)
memcpy (&v, mbuf->data + mbuf->pos, 8);
mbuf->pos += 8;
- switch (mbuf->byte_order)
- {
- case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
- v = GUINT64_FROM_BE (v);
- break;
- case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
- v = GUINT64_FROM_LE (v);
- break;
- case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
- default:
- break;
- }
- return v;
+
+ if (g_memory_buffer_is_byteswapped (mbuf))
+ v = GUINT64_SWAP_LE_BE (v);
+
+ return v;
}
#define MIN_ARRAY_SIZE 128
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]