From afb7f76efafcb04e430168416d9d74113bde13bc Mon Sep 17 00:00:00 2001 From: Dmitry Shachnev Date: Sat, 10 Nov 2018 13:08:25 +0300 Subject: Make pduFromStream work on big endian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (char *) (&code) is pointing to the correct byte on little endian systems, but on big endian it is pointing to the wrong byte. This caused tst_QModbusPdu::testQModbusResponseStreamOperator to fail on big endian. Change-Id: Icf374ed71429154b362fb074fbeb5501ea6095e0 Reviewed-by: Allan Sandfeld Jensen Reviewed-by: Lisandro Damián Nicanor Pérez Meyer --- src/serialbus/qmodbuspdu.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/serialbus/qmodbuspdu.cpp b/src/serialbus/qmodbuspdu.cpp index 350dc76..d3870f8 100644 --- a/src/serialbus/qmodbuspdu.cpp +++ b/src/serialbus/qmodbuspdu.cpp @@ -105,9 +105,10 @@ static int minimumDataSize(const QModbusPdu &pdu, Type type) static QDataStream &pduFromStream(QDataStream &stream, QModbusPdu &pdu, Type type) { - QModbusPdu::FunctionCode code = QModbusPdu::Invalid; - if (stream.readRawData((char *) (&code), sizeof(quint8)) != sizeof(quint8)) + quint8 codeByte = 0; + if (stream.readRawData((char *) (&codeByte), sizeof(quint8)) != sizeof(quint8)) return stream; + QModbusPdu::FunctionCode code = (QModbusPdu::FunctionCode) codeByte; pdu.setFunctionCode(code); auto needsAdditionalRead = [](QModbusPdu &pdu, int size) -> bool { -- cgit v1.2.3