mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-09 12:25:48 +01:00
GDBusMessage: simplify byteswapping
Remove some duplication by simplifying our byteswap checks. https://bugzilla.gnome.org/show_bug.cgi?id=732754
This commit is contained in:
parent
5825055522
commit
d108ada4b9
@ -64,6 +64,16 @@ struct _GMemoryBuffer
|
|||||||
GDataStreamByteOrder byte_order;
|
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
|
static guchar
|
||||||
g_memory_buffer_read_byte (GMemoryBuffer *mbuf)
|
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);
|
memcpy (&v, mbuf->data + mbuf->pos, 2);
|
||||||
mbuf->pos += 2;
|
mbuf->pos += 2;
|
||||||
switch (mbuf->byte_order)
|
|
||||||
{
|
if (g_memory_buffer_is_byteswapped (mbuf))
|
||||||
case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
|
v = GUINT16_SWAP_LE_BE (v);
|
||||||
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;
|
|
||||||
}
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,18 +115,10 @@ g_memory_buffer_read_uint16 (GMemoryBuffer *mbuf)
|
|||||||
|
|
||||||
memcpy (&v, mbuf->data + mbuf->pos, 2);
|
memcpy (&v, mbuf->data + mbuf->pos, 2);
|
||||||
mbuf->pos += 2;
|
mbuf->pos += 2;
|
||||||
switch (mbuf->byte_order)
|
|
||||||
{
|
if (g_memory_buffer_is_byteswapped (mbuf))
|
||||||
case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
|
v = GUINT16_SWAP_LE_BE (v);
|
||||||
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;
|
|
||||||
}
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,18 +135,10 @@ g_memory_buffer_read_int32 (GMemoryBuffer *mbuf)
|
|||||||
|
|
||||||
memcpy (&v, mbuf->data + mbuf->pos, 4);
|
memcpy (&v, mbuf->data + mbuf->pos, 4);
|
||||||
mbuf->pos += 4;
|
mbuf->pos += 4;
|
||||||
switch (mbuf->byte_order)
|
|
||||||
{
|
if (g_memory_buffer_is_byteswapped (mbuf))
|
||||||
case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
|
v = GUINT32_SWAP_LE_BE (v);
|
||||||
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;
|
|
||||||
}
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,18 +155,10 @@ g_memory_buffer_read_uint32 (GMemoryBuffer *mbuf)
|
|||||||
|
|
||||||
memcpy (&v, mbuf->data + mbuf->pos, 4);
|
memcpy (&v, mbuf->data + mbuf->pos, 4);
|
||||||
mbuf->pos += 4;
|
mbuf->pos += 4;
|
||||||
switch (mbuf->byte_order)
|
|
||||||
{
|
if (g_memory_buffer_is_byteswapped (mbuf))
|
||||||
case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
|
v = GUINT32_SWAP_LE_BE (v);
|
||||||
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;
|
|
||||||
}
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,18 +175,10 @@ g_memory_buffer_read_int64 (GMemoryBuffer *mbuf)
|
|||||||
|
|
||||||
memcpy (&v, mbuf->data + mbuf->pos, 8);
|
memcpy (&v, mbuf->data + mbuf->pos, 8);
|
||||||
mbuf->pos += 8;
|
mbuf->pos += 8;
|
||||||
switch (mbuf->byte_order)
|
|
||||||
{
|
if (g_memory_buffer_is_byteswapped (mbuf))
|
||||||
case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
|
v = GUINT64_SWAP_LE_BE (v);
|
||||||
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;
|
|
||||||
}
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,19 +195,11 @@ g_memory_buffer_read_uint64 (GMemoryBuffer *mbuf)
|
|||||||
|
|
||||||
memcpy (&v, mbuf->data + mbuf->pos, 8);
|
memcpy (&v, mbuf->data + mbuf->pos, 8);
|
||||||
mbuf->pos += 8;
|
mbuf->pos += 8;
|
||||||
switch (mbuf->byte_order)
|
|
||||||
{
|
if (g_memory_buffer_is_byteswapped (mbuf))
|
||||||
case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
|
v = GUINT64_SWAP_LE_BE (v);
|
||||||
v = GUINT64_FROM_BE (v);
|
|
||||||
break;
|
return v;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MIN_ARRAY_SIZE 128
|
#define MIN_ARRAY_SIZE 128
|
||||||
|
Loading…
x
Reference in New Issue
Block a user