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);
|
fv.resize(16);
|
||||||
for (int i = 0; i < data.sources_size(); i++)
|
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());
|
(uchar*)fv.data());
|
||||||
qToBigEndian(data.sources(i).v6_lo(),
|
qToBigEndian(quint64(data.sources(i).v6_lo()),
|
||||||
(uchar*)fv.data()+8);
|
(uchar*)fv.data()+8);
|
||||||
|
|
||||||
list << QHostAddress((quint8*)fv.constData()).toString();
|
list << QHostAddress((quint8*)fv.constData()).toString();
|
||||||
@ -240,9 +240,9 @@ QVariant MldProtocol::fieldData(int index, FieldAttrib attrib,
|
|||||||
fv.resize(16 * data.sources_size());
|
fv.resize(16 * data.sources_size());
|
||||||
for (int i = 0; i < data.sources_size(); i++)
|
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));
|
(uchar*)(fv.data() + i*16));
|
||||||
qToBigEndian(data.sources(i).v6_lo(),
|
qToBigEndian(quint64(data.sources(i).v6_lo()),
|
||||||
(uchar*)(fv.data() + i*16 + 8));
|
(uchar*)(fv.data() + i*16 + 8));
|
||||||
}
|
}
|
||||||
return fv;
|
return fv;
|
||||||
@ -254,9 +254,9 @@ QVariant MldProtocol::fieldData(int index, FieldAttrib attrib,
|
|||||||
fv.resize(16);
|
fv.resize(16);
|
||||||
for (int i = 0; i < data.sources_size(); i++)
|
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());
|
(uchar*)fv.data());
|
||||||
qToBigEndian(data.sources(i).v6_lo(),
|
qToBigEndian(quint64(data.sources(i).v6_lo()),
|
||||||
(uchar*)fv.data()+8);
|
(uchar*)fv.data()+8);
|
||||||
|
|
||||||
list << QHostAddress((quint8*)fv.constData()).toString();
|
list << QHostAddress((quint8*)fv.constData()).toString();
|
||||||
@ -295,9 +295,9 @@ QVariant MldProtocol::fieldData(int index, FieldAttrib attrib,
|
|||||||
QStringList sl;
|
QStringList sl;
|
||||||
for (int j = 0; j < rec.sources_size(); j++)
|
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()));
|
(uchar*)(ip.data()));
|
||||||
qToBigEndian(rec.sources(j).v6_lo(),
|
qToBigEndian(quint64(rec.sources(j).v6_lo()),
|
||||||
(uchar*)(ip.data() + 8));
|
(uchar*)(ip.data() + 8));
|
||||||
sl.append(QHostAddress(
|
sl.append(QHostAddress(
|
||||||
(quint8*)ip.constData()).toString());
|
(quint8*)ip.constData()).toString());
|
||||||
@ -322,15 +322,15 @@ QVariant MldProtocol::fieldData(int index, FieldAttrib attrib,
|
|||||||
QByteArray rv = list.at(i).toByteArray();
|
QByteArray rv = list.at(i).toByteArray();
|
||||||
|
|
||||||
rv.insert(4, QByteArray(16+16*rec.sources_size(), char(0)));
|
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));
|
(uchar*)(rv.data()+4));
|
||||||
qToBigEndian(rec.group_address().v6_lo(),
|
qToBigEndian(quint64(rec.group_address().v6_lo()),
|
||||||
(uchar*)(rv.data()+4+8));
|
(uchar*)(rv.data()+4+8));
|
||||||
for (int j = 0; j < rec.sources_size(); j++)
|
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));
|
(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));
|
(uchar*)(rv.data()+20+16*j+8));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -352,9 +352,9 @@ QVariant MldProtocol::fieldData(int index, FieldAttrib attrib,
|
|||||||
QString recStr = list.at(i);
|
QString recStr = list.at(i);
|
||||||
QString str;
|
QString str;
|
||||||
|
|
||||||
qToBigEndian(rec.group_address().v6_hi(),
|
qToBigEndian(quint64(rec.group_address().v6_hi()),
|
||||||
(uchar*)(ip.data()));
|
(uchar*)(ip.data()));
|
||||||
qToBigEndian(rec.group_address().v6_lo(),
|
qToBigEndian(quint64(rec.group_address().v6_lo()),
|
||||||
(uchar*)(ip.data() + 8));
|
(uchar*)(ip.data() + 8));
|
||||||
str.append(QString("Group: %1").arg(
|
str.append(QString("Group: %1").arg(
|
||||||
QHostAddress((quint8*)ip.constData()).toString()));
|
QHostAddress((quint8*)ip.constData()).toString()));
|
||||||
@ -363,9 +363,9 @@ QVariant MldProtocol::fieldData(int index, FieldAttrib attrib,
|
|||||||
QStringList sl;
|
QStringList sl;
|
||||||
for (int j = 0; j < rec.sources_size(); j++)
|
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()));
|
(uchar*)(ip.data()));
|
||||||
qToBigEndian(rec.sources(j).v6_lo(),
|
qToBigEndian(quint64(rec.sources(j).v6_lo()),
|
||||||
(uchar*)(ip.data() + 8));
|
(uchar*)(ip.data() + 8));
|
||||||
sl.append(QHostAddress(
|
sl.append(QHostAddress(
|
||||||
(quint8*)ip.constData()).toString());
|
(quint8*)ip.constData()).toString());
|
||||||
|
Loading…
Reference in New Issue
Block a user