From ddb158e433d71af222dec5ef95f74fda38e9cb20 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Thu, 7 Nov 2019 00:34:07 -0600 Subject: [PATCH] [ox/fs] Fix Directory allocating too much space --- deps/ox/src/ox/fs/filesystem/directory.hpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/deps/ox/src/ox/fs/filesystem/directory.hpp b/deps/ox/src/ox/fs/filesystem/directory.hpp index 1e5d246f..1b625fc3 100644 --- a/deps/ox/src/ox/fs/filesystem/directory.hpp +++ b/deps/ox/src/ox/fs/filesystem/directory.hpp @@ -25,7 +25,7 @@ struct __attribute__((packed)) DirectoryEntry { char name[MaxFileNameLength]; static constexpr std::size_t spaceNeeded(std::size_t chars) { - return offsetof(DirectoryEntryData, name) + chars + 1; + return offsetof(DirectoryEntryData, name) + chars; } }; @@ -234,9 +234,9 @@ ox::Error Directory::write(PathIterator path, InodeId_t in return OxError(1); } - const auto entryDataSize = DirectoryEntry::DirectoryEntryData::spaceNeeded(name->len() + 1); - const auto entrySize = DirectoryEntry::spaceNeeded(entryDataSize); - const auto newSize = old.size() + Buffer::spaceNeeded(m_size + entrySize); + const auto pathSize = name->len() + 1; + const auto entryDataSize = DirectoryEntry::DirectoryEntryData::spaceNeeded(pathSize); + const auto newSize = oldStat.value.size + Buffer::spaceNeeded(entryDataSize); auto cpy = ox_malloca(newSize, Buffer, *old, oldStat.value.size); if (cpy == nullptr) { oxTrace("ox::fs::Directory::write::fail") << "Could not allocate memory for copy of Directory"; @@ -253,7 +253,7 @@ ox::Error Directory::write(PathIterator path, InodeId_t in oxTrace("ox::fs::Directory::write") << "Attempting to write Directory entry:" << name->data(); oxTrace("ox::fs::Directory::write") << "Attempting to write Directory to FileStore"; - oxReturnError(val->init(inode, name->data(), entrySize)); + oxReturnError(val->init(inode, name->data(), val.size())); return m_fs.write(m_inodeId, cpy, cpy->size()); } }