[PATCH v3 2/5] libqmi-glib: handle gfloats on big-endian systems
Thomas Weißschuh
thomas at t-8ch.de
Thu Feb 22 22:43:17 UTC 2018
---
build-aux/qmi-codegen/VariableInteger.py | 4 ++--
src/libqmi-glib/qmi-message.c | 6 +++++-
src/libqmi-glib/qmi-message.h | 2 ++
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/build-aux/qmi-codegen/VariableInteger.py b/build-aux/qmi-codegen/VariableInteger.py
index 12d2a77..ecfb1b8 100644
--- a/build-aux/qmi-codegen/VariableInteger.py
+++ b/build-aux/qmi-codegen/VariableInteger.py
@@ -66,7 +66,7 @@ class VariableInteger(Variable):
'private_format' : self.private_format,
'len' : self.guint_sized_size }
- if self.private_format != 'guint8' and self.private_format != 'gint8' and self.private_format != 'gfloat':
+ if self.private_format not in ('guint8', 'gint8'):
translations['endian'] = ' ' + self.endian + ','
else:
translations['endian'] = ''
@@ -193,7 +193,7 @@ class VariableInteger(Variable):
'common_format' : common_format,
'common_cast' : common_cast }
- if self.private_format != 'guint8' and self.private_format != 'gint8' and self.private_format != 'gfloat':
+ if self.private_format not in ('guint8', 'gint8'):
translations['endian'] = ' ' + self.endian + ','
else:
translations['endian'] = ''
diff --git a/src/libqmi-glib/qmi-message.c b/src/libqmi-glib/qmi-message.c
index 308fc00..65a18bb 100644
--- a/src/libqmi-glib/qmi-message.c
+++ b/src/libqmi-glib/qmi-message.c
@@ -1158,6 +1158,7 @@ gboolean
qmi_message_tlv_read_gfloat (QmiMessage *self,
gsize tlv_offset,
gsize *offset,
+ QmiEndian endian,
gfloat *out,
GError **error)
{
@@ -1170,8 +1171,11 @@ qmi_message_tlv_read_gfloat (QmiMessage *self,
if (!(ptr = tlv_error_if_read_overflow (self, tlv_offset, *offset, 4, error)))
return FALSE;
- /* Yeah, do this for now */
memcpy (out, ptr, 4);
+ if (endian == QMI_ENDIAN_BIG)
+ *out = __QMI_GFLOAT_FROM_BE (*out);
+ else
+ *out = __QMI_GFLOAT_FROM_LE (*out);
*offset = *offset + 4;
return TRUE;
}
diff --git a/src/libqmi-glib/qmi-message.h b/src/libqmi-glib/qmi-message.h
index c15f071..9f502c9 100644
--- a/src/libqmi-glib/qmi-message.h
+++ b/src/libqmi-glib/qmi-message.h
@@ -834,6 +834,7 @@ gboolean qmi_message_tlv_read_sized_guint (QmiMessage *self,
* @self: a #QmiMessage.
* @tlv_offset: offset that was returned by qmi_message_tlv_read_init().
* @offset: address of a the offset within the TLV value.
+ * @endian: source endianness, which will be swapped to host byte order if necessary.
* @out: return location for the read #gfloat.
* @error: return location for error or %NULL.
*
@@ -850,6 +851,7 @@ gboolean qmi_message_tlv_read_sized_guint (QmiMessage *self,
gboolean qmi_message_tlv_read_gfloat (QmiMessage *self,
gsize tlv_offset,
gsize *offset,
+ QmiEndian endian,
gfloat *out,
GError **error);
--
2.16.2
More information about the libqmi-devel
mailing list