[ox/fs] Make write methods take const buffer pointer

This commit is contained in:
Gary Talent 2021-06-25 20:56:19 -05:00
parent 992d3a96d7
commit 9638dc52fe
5 changed files with 16 additions and 15 deletions

View File

@ -85,7 +85,7 @@ class FileStoreTemplate {
Error decLinks(InodeId_t id); 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); Error remove(InodeId_t id);
@ -243,7 +243,7 @@ Error FileStoreTemplate<size_t>::decLinks(InodeId_t id) {
} }
template<typename size_t> template<typename size_t>
Error FileStoreTemplate<size_t>::write(InodeId_t id, void *data, FsSize_t dataSize, uint8_t fileType) { Error FileStoreTemplate<size_t>::write(InodeId_t id, const void *data, FsSize_t dataSize, uint8_t fileType) {
oxTrace("ox::fs::FileStoreTemplate::write") << "Attempting to write to inode" << id; oxTrace("ox::fs::FileStoreTemplate::write") << "Attempting to write to inode" << id;
auto existing = find(id); auto existing = find(id);
if (!canWrite(existing, dataSize)) { if (!canWrite(existing, dataSize)) {

View File

@ -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()) { switch (addr.type()) {
case FileAddressType::Inode: case FileAddressType::Inode:
return write(addr.getInode().value, buffer, size, fileType); return write(addr.getInode().value, buffer, size, fileType);

View File

@ -61,11 +61,11 @@ class FileSystem {
virtual Error resize(uint64_t size, void *buffer) noexcept = 0; 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<FileStat> stat(uint64_t inode) noexcept = 0; virtual Result<FileStat> stat(uint64_t inode) noexcept = 0;
@ -147,9 +147,9 @@ class FileSystemTemplate: public FileSystem {
Error resize(uint64_t size, void *buffer) noexcept override; 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<FileStat> stat(uint64_t inode) noexcept override; Result<FileStat> stat(uint64_t inode) noexcept override;
@ -322,7 +322,7 @@ Error FileSystemTemplate<FileStore, Directory>::resize(uint64_t size, void *buff
} }
template<typename FileStore, typename Directory> template<typename FileStore, typename Directory>
Error FileSystemTemplate<FileStore, Directory>::write(const char *path, void *buffer, uint64_t size, FileType fileType) noexcept { Error FileSystemTemplate<FileStore, Directory>::write(const char *path, const void *buffer, uint64_t size, FileType fileType) noexcept {
auto [inode, err] = find(path); auto [inode, err] = find(path);
if (err) { if (err) {
oxRequire(generatedId, m_fs.generateInodeId()); oxRequire(generatedId, m_fs.generateInodeId());
@ -335,7 +335,7 @@ Error FileSystemTemplate<FileStore, Directory>::write(const char *path, void *bu
} }
template<typename FileStore, typename Directory> template<typename FileStore, typename Directory>
Error FileSystemTemplate<FileStore, Directory>::write(uint64_t inode, void *buffer, uint64_t size, FileType fileType) noexcept { Error FileSystemTemplate<FileStore, Directory>::write(uint64_t inode, const void *buffer, uint64_t size, FileType fileType) noexcept {
return m_fs.write(inode, buffer, size, static_cast<uint8_t>(fileType)); return m_fs.write(inode, buffer, size, static_cast<uint8_t>(fileType));
} }

View File

@ -119,11 +119,11 @@ Error PassThroughFS::resize(uint64_t, void*) noexcept {
return OxError(1, "resize is not supported by PassThroughFS"); 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)); const auto p = (m_path / stripSlash(path));
try { try {
std::ofstream f(p, std::ios::binary); std::ofstream f(p, std::ios::binary);
f.write(static_cast<char*>(buffer), size); f.write(static_cast<const char*>(buffer), size);
} catch (const std::fstream::failure &f) { } catch (const std::fstream::failure &f) {
oxTracef("ox::fs::PassThroughFS::read::error", "Write of {} failed: {}", path, f.what()); oxTracef("ox::fs::PassThroughFS::read::error", "Write of {} failed: {}", path, f.what());
return OxError(1); return OxError(1);
@ -131,7 +131,7 @@ Error PassThroughFS::write(const char *path, void *buffer, uint64_t size, FileTy
return OxError(0); 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 // unsupported
return OxError(1, "write(uint64_t, void*, uint64_t, uint8_t) is not supported by PassThroughFS"); return OxError(1, "write(uint64_t, void*, uint64_t, uint8_t) is not supported by PassThroughFS");
} }

View File

@ -60,9 +60,9 @@ class PassThroughFS: public FileSystem {
Error resize(uint64_t size, void *buffer = nullptr) noexcept override; 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<FileStat> stat(uint64_t inode) noexcept override; Result<FileStat> 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; Error walk(Error(*cb)(uint8_t, uint64_t, uint64_t)) noexcept override;
[[nodiscard]]
bool valid() const noexcept override; bool valid() const noexcept override;
private: private: