diff --git a/src/buffer.cc b/src/buffer.cc index 629842e2..5677bf35 100644 --- a/src/buffer.cc +++ b/src/buffer.cc @@ -32,7 +32,7 @@ Buffer::Buffer(String name, Flags flags, BufferLines lines, for (auto& line : lines) { - kak_assert(not line->length == 0 and line->data[line->length-1] == '\n'); + kak_assert(not line->length == 0 and line->data()[line->length-1] == '\n'); } static_cast(m_lines) = std::move(lines); @@ -173,7 +173,7 @@ void Buffer::reload(BufferLines lines, time_t fs_timestamp) for (auto& line : lines) { - kak_assert(not line->length == 0 and line->data[line->length-1] == '\n'); + kak_assert(not line->length == 0 and line->data()[line->length-1] == '\n'); if (not (m_flags & Flags::NoUndo)) m_current_undo_group.emplace_back( Modification::Insert, line_count()-1, m_lines.back()); diff --git a/src/shared_string.hh b/src/shared_string.hh index 3ed571e8..a3ffcd92 100644 --- a/src/shared_string.hh +++ b/src/shared_string.hh @@ -13,27 +13,28 @@ struct StringStorage : UseMemoryDomain { int refcount; int length; - char data[1]; - StringView strview() const { return {data, length}; } + char* data() { return reinterpret_cast(this + 1); } + const char* data() const { return reinterpret_cast(this + 1); } + StringView strview() const { return {data(), length}; } static StringStorage* create(StringView str, char back = 0) { const int len = (int)str.length() + (back != 0 ? 1 : 0); - void* ptr = StringStorage::operator new(sizeof(StringStorage) + len); + void* ptr = StringStorage::operator new(sizeof(StringStorage) + len + 1); StringStorage* res = reinterpret_cast(ptr); - memcpy(res->data, str.data(), (int)str.length()); + memcpy(res->data(), str.data(), (int)str.length()); res->refcount = 0; res->length = len; if (back != 0) - res->data[len-1] = back; - res->data[len] = 0; + res->data()[len-1] = back; + res->data()[len] = 0; return res; } static void destroy(StringStorage* s) { - StringStorage::operator delete(s, sizeof(StringStorage) + s->length); + StringStorage::operator delete(s, sizeof(StringStorage) + s->length + 1); } friend void inc_ref_count(StringStorage* s) { ++s->refcount; }