diff options
-rw-r--r-- | src/network/kernel/qnetworkinterface.cpp | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/src/network/kernel/qnetworkinterface.cpp b/src/network/kernel/qnetworkinterface.cpp index 3ed09c1483..c62244fab3 100644 --- a/src/network/kernel/qnetworkinterface.cpp +++ b/src/network/kernel/qnetworkinterface.cpp @@ -36,6 +36,7 @@ #include "qdebug.h" #include "qendian.h" +#include "private/qtools_p.h" #ifndef QT_NO_NETWORKINTERFACE @@ -116,18 +117,14 @@ QList<QSharedDataPointer<QNetworkInterfacePrivate> > QNetworkInterfaceManager::a QString QNetworkInterfacePrivate::makeHwAddress(int len, uchar *data) { - QString result; + const int outLen = qMax(len * 2 + (len - 1) * 1, 0); + QString result(outLen, Qt::Uninitialized); + QChar *out = result.data(); for (int i = 0; i < len; ++i) { if (i) - result += QLatin1Char(':'); - - char buf[3]; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && defined(_MSC_VER) && _MSC_VER >= 1400 - sprintf_s(buf, 3, "%02hX", ushort(data[i])); -#else - sprintf(buf, "%02hX", ushort(data[i])); -#endif - result += QLatin1String(buf); + *out++ = QLatin1Char(':'); + *out++ = QLatin1Char(QtMiscUtils::toHexUpper(data[i] / 16)); + *out++ = QLatin1Char(QtMiscUtils::toHexUpper(data[i] % 16)); } return result; } |