Fix incorrect hardware address on systems without getifaddrs()

On unix systems for which QT_NO_GETIFADDRS is defined, the way that the
hardware address field is extracted from the result of a call to
qt_safe_ioctl() is incorrect. The address of the ifreq.ifr_addr struct
is taken rather than the appropriate member within that struct, sa_data,
resulting in a memory offset and subsequently the hardware address has
garbage in the first two of six fields. This commit modifies the code
to pass the sa_data member instead of the address of the struct as a
whole.

Task-number: QTBUG-19165
Merge-request: 2614
Reviewed-by: Martin Petersson
(cherry picked from commit 004ad12669ef696eeba70fd57d1eb0c67c806d1d)
This commit is contained in:
Craig Scott 2011-05-11 16:51:28 +10:00 committed by Martin Petersson
parent 5a19d52ae7
commit 0ebe0414d2

View File

@ -219,7 +219,7 @@ static QNetworkInterfacePrivate *findInterface(int socket, QList<QNetworkInterfa
#ifdef SIOCGIFHWADDR #ifdef SIOCGIFHWADDR
// Get the HW address // Get the HW address
if (qt_safe_ioctl(socket, SIOCGIFHWADDR, &req) >= 0) { if (qt_safe_ioctl(socket, SIOCGIFHWADDR, &req) >= 0) {
uchar *addr = (uchar *)&req.ifr_addr; uchar *addr = (uchar *)req.ifr_addr.sa_data;
iface->hardwareAddress = iface->makeHwAddress(6, addr); iface->hardwareAddress = iface->makeHwAddress(6, addr);
} }
#endif #endif