Typecast to quint64 before passing to qToBigEndian
For 64-bit arch, Qt defines quint64 as unsigned long long (and quint32 as unsigned int), but Protobuf's google::protobuf::uint64 is defined as unsigned long. Now Qt defines qbswap only for the Qt defined 8/16/32/64 integer types aka q[u]intXXX. So qbswap<unsigned long long> and qbswap<unsigned int> is defined but not qbswap<unsigned long>. mld.cpp was using qToBigEndian (which uses qbswap in turn) with a protobuf uint64 triggering the undefined references on some 64bit platforms. Fixes #265
This commit is contained in:
parent
913ef5c0ee
commit
c43f7d1769
@ -225,9 +225,9 @@ QVariant MldProtocol::fieldData(int index, FieldAttrib attrib,
|
||||
fv.resize(16);
|
||||
for (int i = 0; i < data.sources_size(); i++)
|
||||
{
|
||||
qToBigEndian(data.sources(i).v6_hi(),
|
||||
qToBigEndian(quint64(data.sources(i).v6_hi()),
|
||||
(uchar*)fv.data());
|
||||
qToBigEndian(data.sources(i).v6_lo(),
|
||||
qToBigEndian(quint64(data.sources(i).v6_lo()),
|
||||
(uchar*)fv.data()+8);
|
||||
|
||||
list << QHostAddress((quint8*)fv.constData()).toString();
|
||||
@ -240,9 +240,9 @@ QVariant MldProtocol::fieldData(int index, FieldAttrib attrib,
|
||||
fv.resize(16 * data.sources_size());
|
||||
for (int i = 0; i < data.sources_size(); i++)
|
||||
{
|
||||
qToBigEndian(data.sources(i).v6_hi(),
|
||||
qToBigEndian(quint64(data.sources(i).v6_hi()),
|
||||
(uchar*)(fv.data() + i*16));
|
||||
qToBigEndian(data.sources(i).v6_lo(),
|
||||
qToBigEndian(quint64(data.sources(i).v6_lo()),
|
||||
(uchar*)(fv.data() + i*16 + 8));
|
||||
}
|
||||
return fv;
|
||||
@ -254,9 +254,9 @@ QVariant MldProtocol::fieldData(int index, FieldAttrib attrib,
|
||||
fv.resize(16);
|
||||
for (int i = 0; i < data.sources_size(); i++)
|
||||
{
|
||||
qToBigEndian(data.sources(i).v6_hi(),
|
||||
qToBigEndian(quint64(data.sources(i).v6_hi()),
|
||||
(uchar*)fv.data());
|
||||
qToBigEndian(data.sources(i).v6_lo(),
|
||||
qToBigEndian(quint64(data.sources(i).v6_lo()),
|
||||
(uchar*)fv.data()+8);
|
||||
|
||||
list << QHostAddress((quint8*)fv.constData()).toString();
|
||||
@ -295,9 +295,9 @@ QVariant MldProtocol::fieldData(int index, FieldAttrib attrib,
|
||||
QStringList sl;
|
||||
for (int j = 0; j < rec.sources_size(); j++)
|
||||
{
|
||||
qToBigEndian(rec.sources(j).v6_hi(),
|
||||
qToBigEndian(quint64(rec.sources(j).v6_hi()),
|
||||
(uchar*)(ip.data()));
|
||||
qToBigEndian(rec.sources(j).v6_lo(),
|
||||
qToBigEndian(quint64(rec.sources(j).v6_lo()),
|
||||
(uchar*)(ip.data() + 8));
|
||||
sl.append(QHostAddress(
|
||||
(quint8*)ip.constData()).toString());
|
||||
@ -322,15 +322,15 @@ QVariant MldProtocol::fieldData(int index, FieldAttrib attrib,
|
||||
QByteArray rv = list.at(i).toByteArray();
|
||||
|
||||
rv.insert(4, QByteArray(16+16*rec.sources_size(), char(0)));
|
||||
qToBigEndian(rec.group_address().v6_hi(),
|
||||
qToBigEndian(quint64(rec.group_address().v6_hi()),
|
||||
(uchar*)(rv.data()+4));
|
||||
qToBigEndian(rec.group_address().v6_lo(),
|
||||
qToBigEndian(quint64(rec.group_address().v6_lo()),
|
||||
(uchar*)(rv.data()+4+8));
|
||||
for (int j = 0; j < rec.sources_size(); j++)
|
||||
{
|
||||
qToBigEndian(rec.sources(j).v6_hi(),
|
||||
qToBigEndian(quint64(rec.sources(j).v6_hi()),
|
||||
(uchar*)(rv.data()+20+16*j));
|
||||
qToBigEndian(rec.sources(j).v6_lo(),
|
||||
qToBigEndian(quint64(rec.sources(j).v6_lo()),
|
||||
(uchar*)(rv.data()+20+16*j+8));
|
||||
}
|
||||
|
||||
@ -352,9 +352,9 @@ QVariant MldProtocol::fieldData(int index, FieldAttrib attrib,
|
||||
QString recStr = list.at(i);
|
||||
QString str;
|
||||
|
||||
qToBigEndian(rec.group_address().v6_hi(),
|
||||
qToBigEndian(quint64(rec.group_address().v6_hi()),
|
||||
(uchar*)(ip.data()));
|
||||
qToBigEndian(rec.group_address().v6_lo(),
|
||||
qToBigEndian(quint64(rec.group_address().v6_lo()),
|
||||
(uchar*)(ip.data() + 8));
|
||||
str.append(QString("Group: %1").arg(
|
||||
QHostAddress((quint8*)ip.constData()).toString()));
|
||||
@ -363,9 +363,9 @@ QVariant MldProtocol::fieldData(int index, FieldAttrib attrib,
|
||||
QStringList sl;
|
||||
for (int j = 0; j < rec.sources_size(); j++)
|
||||
{
|
||||
qToBigEndian(rec.sources(j).v6_hi(),
|
||||
qToBigEndian(quint64(rec.sources(j).v6_hi()),
|
||||
(uchar*)(ip.data()));
|
||||
qToBigEndian(rec.sources(j).v6_lo(),
|
||||
qToBigEndian(quint64(rec.sources(j).v6_lo()),
|
||||
(uchar*)(ip.data() + 8));
|
||||
sl.append(QHostAddress(
|
||||
(quint8*)ip.constData()).toString());
|
||||
|
Loading…
Reference in New Issue
Block a user