From 9638dc52fe2be62e9e540920107d286951af528c Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Fri, 25 Jun 2021 20:56:19 -0500 Subject: [PATCH] [ox/fs] Make write methods take const buffer pointer --- deps/ox/src/ox/fs/filestore/filestoretemplate.hpp | 4 ++-- deps/ox/src/ox/fs/filesystem/filesystem.cpp | 2 +- deps/ox/src/ox/fs/filesystem/filesystem.hpp | 14 +++++++------- deps/ox/src/ox/fs/filesystem/passthroughfs.cpp | 6 +++--- deps/ox/src/ox/fs/filesystem/passthroughfs.hpp | 5 +++-- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp b/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp index a0f58749..120dcd9f 100644 --- a/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp +++ b/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp @@ -85,7 +85,7 @@ class FileStoreTemplate { Error decLinks(InodeId_t id); - Error write(InodeId_t id, void *data, FsSize_t dataLen, uint8_t fileType = 0); + Error write(InodeId_t id, const void *data, FsSize_t dataLen, uint8_t fileType = 0); Error remove(InodeId_t id); @@ -243,7 +243,7 @@ Error FileStoreTemplate::decLinks(InodeId_t id) { } template -Error FileStoreTemplate::write(InodeId_t id, void *data, FsSize_t dataSize, uint8_t fileType) { +Error FileStoreTemplate::write(InodeId_t id, const void *data, FsSize_t dataSize, uint8_t fileType) { oxTrace("ox::fs::FileStoreTemplate::write") << "Attempting to write to inode" << id; auto existing = find(id); if (!canWrite(existing, dataSize)) { diff --git a/deps/ox/src/ox/fs/filesystem/filesystem.cpp b/deps/ox/src/ox/fs/filesystem/filesystem.cpp index 5435b4e8..f4420f5e 100644 --- a/deps/ox/src/ox/fs/filesystem/filesystem.cpp +++ b/deps/ox/src/ox/fs/filesystem/filesystem.cpp @@ -72,7 +72,7 @@ Error FileSystem::remove(const FileAddress &addr, bool recursive) noexcept { } } -Error FileSystem::write(const FileAddress &addr, void *buffer, uint64_t size, FileType fileType) noexcept { +Error FileSystem::write(const FileAddress &addr, const void *buffer, uint64_t size, FileType fileType) noexcept { switch (addr.type()) { case FileAddressType::Inode: return write(addr.getInode().value, buffer, size, fileType); diff --git a/deps/ox/src/ox/fs/filesystem/filesystem.hpp b/deps/ox/src/ox/fs/filesystem/filesystem.hpp index 892e009a..a0f947fc 100644 --- a/deps/ox/src/ox/fs/filesystem/filesystem.hpp +++ b/deps/ox/src/ox/fs/filesystem/filesystem.hpp @@ -61,11 +61,11 @@ class FileSystem { virtual Error resize(uint64_t size, void *buffer) noexcept = 0; - virtual Error write(const char *path, void *buffer, uint64_t size, FileType fileType) noexcept = 0; + virtual Error write(const char *path, const void *buffer, uint64_t size, FileType fileType) noexcept = 0; - virtual Error write(uint64_t inode, void *buffer, uint64_t size, FileType fileType) noexcept = 0; + virtual Error write(uint64_t inode, const void *buffer, uint64_t size, FileType fileType) noexcept = 0; - Error write(const FileAddress &addr, void *buffer, uint64_t size, FileType fileType = FileType::NormalFile) noexcept; + Error write(const FileAddress &addr, const void *buffer, uint64_t size, FileType fileType = FileType::NormalFile) noexcept; virtual Result stat(uint64_t inode) noexcept = 0; @@ -147,9 +147,9 @@ class FileSystemTemplate: public FileSystem { Error resize(uint64_t size, void *buffer) noexcept override; - Error write(const char *path, void *buffer, uint64_t size, FileType fileType) noexcept override; + Error write(const char *path, const void *buffer, uint64_t size, FileType fileType) noexcept override; - Error write(uint64_t inode, void *buffer, uint64_t size, FileType fileType) noexcept override; + Error write(uint64_t inode, const void *buffer, uint64_t size, FileType fileType) noexcept override; Result stat(uint64_t inode) noexcept override; @@ -322,7 +322,7 @@ Error FileSystemTemplate::resize(uint64_t size, void *buff } template -Error FileSystemTemplate::write(const char *path, void *buffer, uint64_t size, FileType fileType) noexcept { +Error FileSystemTemplate::write(const char *path, const void *buffer, uint64_t size, FileType fileType) noexcept { auto [inode, err] = find(path); if (err) { oxRequire(generatedId, m_fs.generateInodeId()); @@ -335,7 +335,7 @@ Error FileSystemTemplate::write(const char *path, void *bu } template -Error FileSystemTemplate::write(uint64_t inode, void *buffer, uint64_t size, FileType fileType) noexcept { +Error FileSystemTemplate::write(uint64_t inode, const void *buffer, uint64_t size, FileType fileType) noexcept { return m_fs.write(inode, buffer, size, static_cast(fileType)); } diff --git a/deps/ox/src/ox/fs/filesystem/passthroughfs.cpp b/deps/ox/src/ox/fs/filesystem/passthroughfs.cpp index 104bf307..305bf3cd 100644 --- a/deps/ox/src/ox/fs/filesystem/passthroughfs.cpp +++ b/deps/ox/src/ox/fs/filesystem/passthroughfs.cpp @@ -119,11 +119,11 @@ Error PassThroughFS::resize(uint64_t, void*) noexcept { return OxError(1, "resize is not supported by PassThroughFS"); } -Error PassThroughFS::write(const char *path, void *buffer, uint64_t size, FileType) noexcept { +Error PassThroughFS::write(const char *path, const void *buffer, uint64_t size, FileType) noexcept { const auto p = (m_path / stripSlash(path)); try { std::ofstream f(p, std::ios::binary); - f.write(static_cast(buffer), size); + f.write(static_cast(buffer), size); } catch (const std::fstream::failure &f) { oxTracef("ox::fs::PassThroughFS::read::error", "Write of {} failed: {}", path, f.what()); return OxError(1); @@ -131,7 +131,7 @@ Error PassThroughFS::write(const char *path, void *buffer, uint64_t size, FileTy return OxError(0); } -Error PassThroughFS::write(uint64_t, void*, uint64_t, FileType) noexcept { +Error PassThroughFS::write(uint64_t, const void*, uint64_t, FileType) noexcept { // unsupported return OxError(1, "write(uint64_t, void*, uint64_t, uint8_t) is not supported by PassThroughFS"); } diff --git a/deps/ox/src/ox/fs/filesystem/passthroughfs.hpp b/deps/ox/src/ox/fs/filesystem/passthroughfs.hpp index 1df8dc27..2e3c6a82 100644 --- a/deps/ox/src/ox/fs/filesystem/passthroughfs.hpp +++ b/deps/ox/src/ox/fs/filesystem/passthroughfs.hpp @@ -60,9 +60,9 @@ class PassThroughFS: public FileSystem { Error resize(uint64_t size, void *buffer = nullptr) noexcept override; - Error write(const char *path, void *buffer, uint64_t size, FileType fileType = FileType::NormalFile) noexcept override; + Error write(const char *path, const void *buffer, uint64_t size, FileType fileType = FileType::NormalFile) noexcept override; - Error write(uint64_t inode, void *buffer, uint64_t size, FileType fileType = FileType::NormalFile) noexcept override; + Error write(uint64_t inode, const void *buffer, uint64_t size, FileType fileType = FileType::NormalFile) noexcept override; Result stat(uint64_t inode) noexcept override; @@ -78,6 +78,7 @@ class PassThroughFS: public FileSystem { Error walk(Error(*cb)(uint8_t, uint64_t, uint64_t)) noexcept override; + [[nodiscard]] bool valid() const noexcept override; private: