aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/smallstringlayout.h
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2022-08-07 03:37:47 +0200
committerMarco Bubke <marco.bubke@qt.io>2022-08-16 16:15:51 +0000
commitc9d45d1bc0570484fc6e5f462b3c693c3db07ea2 (patch)
treea96002e618270964974b037b88348ce0005f6238 /src/libs/utils/smallstringlayout.h
parentcf064500aaa0c0de7eafffd179250f9922bb03f8 (diff)
Utils: Remove null termination from SmallString
We expect mostly a string view which has no null termination. Code which depends on null termination is broken and it is better break early. Change-Id: I7c2c41fb114e6aaf3a23053b522b37f7af5e1abf Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Diffstat (limited to 'src/libs/utils/smallstringlayout.h')
-rw-r--r--src/libs/utils/smallstringlayout.h20
1 files changed, 6 insertions, 14 deletions
diff --git a/src/libs/utils/smallstringlayout.h b/src/libs/utils/smallstringlayout.h
index c1de97e109f..21c770d604c 100644
--- a/src/libs/utils/smallstringlayout.h
+++ b/src/libs/utils/smallstringlayout.h
@@ -124,7 +124,7 @@ struct alignas(16) StringDataLayout
template<size_type Size>
constexpr StringDataLayout(const char (&string)[Size]) noexcept
{
- if constexpr (Size <= MaximumShortStringDataAreaSize) {
+ if constexpr (Size + 1 <= MaximumShortStringDataAreaSize) {
control = {Size - 1, false, false};
for (size_type i = 0; i < Size; ++i)
shortString[i] = string[i];
@@ -136,14 +136,10 @@ struct alignas(16) StringDataLayout
constexpr static size_type shortStringCapacity() noexcept
{
- return MaximumShortStringDataAreaSize - 1;
+ return MaximumShortStringDataAreaSize;
}
- constexpr void reset()
- {
- control = ControlBlock<MaximumShortStringDataAreaSize>();
- shortString[0] = '\0';
- }
+ constexpr void reset() { control = ControlBlock<MaximumShortStringDataAreaSize>(); }
#pragma pack(push)
#pragma pack(1)
@@ -180,7 +176,7 @@ struct alignas(16) StringDataLayout<MaximumShortStringDataAreaSize,
template<size_type Size>
constexpr StringDataLayout(const char (&string)[Size]) noexcept
{
- if constexpr (Size <= MaximumShortStringDataAreaSize) {
+ if constexpr (Size + 1 <= MaximumShortStringDataAreaSize) {
control = {Size - 1, false, false};
for (size_type i = 0; i < Size; ++i)
shortString[i] = string[i];
@@ -204,14 +200,10 @@ struct alignas(16) StringDataLayout<MaximumShortStringDataAreaSize,
constexpr static size_type shortStringCapacity() noexcept
{
- return MaximumShortStringDataAreaSize - 1;
+ return MaximumShortStringDataAreaSize;
}
- constexpr void reset()
- {
- control = ControlBlock<MaximumShortStringDataAreaSize>();
- shortString[0] = '\0';
- }
+ constexpr void reset() { control = ControlBlock<MaximumShortStringDataAreaSize>(); }
#pragma pack(push)
#pragma pack(1)