diff options
-rw-r--r-- | src/corelib/text/qbytearrayalgorithms.h | 10 | ||||
-rw-r--r-- | tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp | 14 |
2 files changed, 11 insertions, 13 deletions
diff --git a/src/corelib/text/qbytearrayalgorithms.h b/src/corelib/text/qbytearrayalgorithms.h index 638af2948b..a78e6e1709 100644 --- a/src/corelib/text/qbytearrayalgorithms.h +++ b/src/corelib/text/qbytearrayalgorithms.h @@ -96,12 +96,10 @@ inline size_t qstrlen(const char *str) inline size_t qstrnlen(const char *str, size_t maxlen) { - size_t length = 0; - if (str) { - while (length < maxlen && *str++) - length++; - } - return length; + if (!str) + return 0; + auto end = static_cast<const char *>(memchr(str, '\0', maxlen)); + return end ? end - str : maxlen; } // implemented in qbytearray.cpp diff --git a/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp b/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp index a4798e77aa..0f1f00bf6c 100644 --- a/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp +++ b/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp @@ -803,18 +803,18 @@ void tst_QByteArray::qvsnprintf() void tst_QByteArray::qstrlen() { const char *src = "Something about ... \0 a string."; - QCOMPARE(::qstrlen((char*)0), (uint)0); - QCOMPARE(::qstrlen(src), (uint)20); + QCOMPARE(::qstrlen(nullptr), size_t(0)); + QCOMPARE(::qstrlen(src), size_t(20)); } void tst_QByteArray::qstrnlen() { const char *src = "Something about ... \0 a string."; - QCOMPARE(::qstrnlen((char*)0, 1), (uint)0); - QCOMPARE(::qstrnlen(src, 31), (uint)20); - QCOMPARE(::qstrnlen(src, 19), (uint)19); - QCOMPARE(::qstrnlen(src, 21), (uint)20); - QCOMPARE(::qstrnlen(src, 20), (uint)20); + QCOMPARE(::qstrnlen(nullptr, 1), size_t(0)); + QCOMPARE(::qstrnlen(src, 31), size_t(20)); + QCOMPARE(::qstrnlen(src, 19), size_t(19)); + QCOMPARE(::qstrnlen(src, 21), size_t(20)); + QCOMPARE(::qstrnlen(src, 20), size_t(20)); } void tst_QByteArray::qstrcpy() |