summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/text/qbytearrayalgorithms.h10
-rw-r--r--tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp14
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()